ElasticSearch - 模糊关键字匹配
ElasticSearch - Fuzzy Keyword Match
我正在寻找一种方法来模糊匹配单词相等的字段。
即。如果我有一个值是这样的字段:-
foobar
foobar number2
barfoo
barfoo number2
我用 fooba
搜索我只想 return 文档 foobar
而不是 foobar number2
如果我用 number2
搜索,我不想 return 任何东西,因为两个 number2
值都有 2 个词。
我知道术语查询不能模糊。这对任何查询都可行吗?
我正在使用 elasticsearch 5.4
谢谢
经过 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"
}
}
}
我正在寻找一种方法来模糊匹配单词相等的字段。
即。如果我有一个值是这样的字段:-
foobar
foobar number2
barfoo
barfoo number2
我用 fooba
搜索我只想 return 文档 foobar
而不是 foobar number2
如果我用 number2
搜索,我不想 return 任何东西,因为两个 number2
值都有 2 个词。
我知道术语查询不能模糊。这对任何查询都可行吗?
我正在使用 elasticsearch 5.4
谢谢
经过 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"
}
}
}