Ngram Tokenizer在字段上,而不是查询

时间:2017-01-09 16:12:57

标签: elasticsearch n-gram

我在这里找不到用例的解决方案。 基本上,它非常简单:我需要执行“包含”查询,如SQL like '%...%'

我已经看到有一个正则表达式查询,我实际上设法完美地工作,但由于它似乎很难扩展,我正在尝试nGrams。现在,我之前和他们一起玩过,并且知道“他们是如何工作的”,但这种行为并不是我期望的行为。

基本上,我已将我的分析器配置为mingram = 2,maxgram = 20.假设我将一个名为“Christophe”的用户编入索引。我希望查询“Chris”实际匹配,它确实匹配,因为Chris是一个5克的Christophe。问题是,“意大利调味饭”也是如此,因为它被分解为Ngrams,最终“是”是2克的“Christophe”,所以它也匹配。

我需要的是分析器在索引时实际分解nGrams中的索引字段,并将它们与FULL文本查询进行比较。烩饭应该与Risotto,XXXRisottoXXX等匹配,但不能与Risolo或nGrams匹配的东西匹配。

有没有解决方案?

1 个答案:

答案 0 :(得分:2)

您需要使用search_analyzer设置来设置不同的索引时间和搜索时间分析器。

来自docs的示例:

"mappings": {
  "my_type": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}