在非标记化字段上使用同义词标记过滤器

时间:2014-12-18 19:26:21

标签: elasticsearch lucene token analyzer

让我们说我想使用edge-ngram技术进行自动完成(完成建议器对我来说不是一个好选择)。我想索引"我们的军队"通过[" u","我们","我们","我们a","我们ar", "我们的手臂","我们的军队"]。

问题是 - 我还有一个同义词列表。例如," us"是" usa"的同义词。我怎么能分裂我们的军队"进入"我们"和"军队",找到他们的同义词并将它们重新组合在一起?

我尝试过这样的事情:

{
    "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": [],
            }
        }
    }
}

没有运气。

有没有办法连接令牌?这样我就可以将一个条目分成标记,找到同义词并将标记连接在一起?

也许是一种方法来匹配_phrase并确保第一个标记是位置0?

1 个答案:

答案 0 :(得分:0)

你不能仅仅因为你有一个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"
      ]
    }
  }