ElasticSearch - 模糊关键字匹配

时间:2017-10-11 09:51:07

标签: elasticsearch lucene elasticsearch-5

我正在寻找一种方法来模糊匹配单词相等的字段。

即。如果我有一个像这样的值的字段: -

foobar
foobar number2
barfoo
barfoo number2

我使用fooba进行搜索我只想返回文档foobar而不是foobar number2

如果我使用number2进行搜索,我希望不返回任何内容,因为number2个值都有2个字。

我知道术语查询不会模糊。任何查询都可以吗?

我正在使用elasticsearch 5.4

由于

1 个答案:

答案 0 :(得分:0)

经过2天的战斗后,我在发布问题20分钟后将其解决了。

您需要使用keyword标记器为该字段创建自定义分析器: -

"analyzer": {
   "all_words_analyzer": {
      "filter": [
          "lowercase"
      ],
      "type": "custom",
      "tokenizer": "keyword"
   }
}

然后在字段上设置: -

"term": {
    "type": "text",
    "analyzer": "all_words_analyzer"
}

现在正常的模糊匹配将如上所述。

"query": {
   "fuzzy": {
       term": {
           "value": "fooba"
       }
   }
}