【问题标题】:Using synonym token filters on a not tokenized field在未标记化的字段上使用同义词标记过滤器
【发布时间】:2015-02-17 16:32:06
【问题描述】:

假设我想使用 edge-ngram 技术进行自动完成(完成建议对我来说不是一个好的选择)。我想通过 ["u"、"us"、"us"、"us a"、"us ar"、"us arm"、"us Army"] 索引“us Army”。

问题是 - 我还有一个同义词列表。例如,“我们”是“美国”的同义词。如何将“我们军队”拆分为“我们”和“军队”,找到它们的同义词并将它们重新组合在一起?

我试着做这样的事情:

{
    "analysis": {
        "filter": {
            "ngram_prefix": {
                "type":     "edge_ngram",
                "min_gram": 1,
                "max_gram": 20
            },
            "custom_synonyms": {
                "type": "synonym",
                "tokenizer": "standard",
                "synonyms_path": "/my/synonym/path/synonyms.txt",
                "ignore_case": True
            }
        },
        "analyzer": {
            "synonym_ngram": {
                "type":      "custom",
                "tokenizer": "keyword",
                "filter": [
                    "custom_synonyms",
                    "lowercase",
                    "ngram_prefix",
                ],
                "char_filter": [],
            }
        }
    }
}

没有运气。

有没有办法连接标记?这样我就可以将条目拆分为标记,找到同义词并将标记重新连接在一起?

也许是一种匹配短语并确保第一个标记位于位置 0 的方法?

【问题讨论】:

    标签: elasticsearch lucene token analyzer


    【解决方案1】:

    你不能仅仅因为你有一个keyword 标记器就这样做。这不会拆分文本,以便在每个术语的基础上识别同义词。因为keyword 你的term 是整个文本。所以,除非你定义你的同义词,比如"us army,usa army,u s a army,united states of america army",否则我看不到其他方式:

     "my_synonym_filter": {
          "tokenizer": "keyword",
          "type": "synonym",
          "synonyms": [
            "us army,usa army,u s a army,united states of america army"
          ]
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多