gpt4 book ai didi

java - ElasticSearch - 匹配查询与模糊搜索字母数字

转载 作者:行者123 更新时间:2023-12-02 10:37:13 26 4
gpt4 key购买 nike

使用具有模糊性的匹配查询并查询字母数字术语,但结果无法正确显示。

请找到我在 kibana 中运行的以下查询

GET index_name/_search
{
"query": {
"match" : {
"values" : {
"query" : "A661752110",
"operator" : "and",
"fuzziness": 1,
"boost": 1.0,
"prefix_length": 0,
"max_expansions": 100

}
}
}
}

我期待的结果如下:

A661752110
A66175211012
A661752110111
A661752110-12
A661752110-111

但我得到的结果如下:

A661752110
A661752111
A661752119

请查找我的映射详细信息:

PUT index_name
{
"settings": {
"analysis": {
"analyzer": {
"attr_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"char_filter": [
"html_strip"
],
"filter": ["lowercase", "asciifolding"]
}
}
}
},

"mappings": {
"doc": {
"properties": {
"values": {
"type": "text",
"analyzer": "attr_analyzer"
},
"id":{
"type": "text"
}
}
}
}
}

最佳答案

模糊匹配允许将两个“模糊”相似的单词视为同一个单词。 Elasticsearch 使用 Damareau-Levenshtein 距离来衡量两个字符串的相似度。 Damareau-Levenshtein 距离测量对字符串的单个字符编辑的数量,允许四种编辑:

  • 用一个字符替换另一个字符:_f_ox → _b_ox
  • 插入新字符:sic → sic_k_
  • 删除字符:b_l_ack → 返回
  • 两个相邻字符的调换:_st_ar → _ts_ar

编辑距离在搜索请求中通过fuzziness 参数进行控制。您将模糊度指定为1,这意味着Elasticsearch 将仅返回通过对“A661752110”执行一次编辑(替换、插入、删除或转置)而获得的字符串。

您期望未显示的单词的编辑距离严格大于 1。请注意,在 Elasticsearch 中授权的最大值为 2。

实现您想要的目标的一些建议:

  • 如果您希望 A661752110-12A661752110-111 匹配。您可以使用分词器在找到 - 时分割文本。例如,这就是标准分词器所做的事情。
  • 如果您还需要 A66175211012A661752110111,最好的选择是使用像这样的正则表达式查询

{ "query": { "regexp": { "values": { "value": "A661752110.{,3}"} } } }

关于java - ElasticSearch - 匹配查询与模糊搜索字母数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53189421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com