我正在尝试进行模糊搜索,应该是这样的

我的索引是这样的
{
"test": {
"aliases": {},
"mappings": {
"properties": {
"first_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"last_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "test",
"creation_date": "1617623285742",
"number_of_replicas": "1",
"uuid": "MxSWoxSoS6y6x5Jdt2AvMQ",
"version": {
"created": "7120099"
}
}
}
}
}在该索引内有一个数据,其中包含
{
"first_name": "homo sapiens",
"last_name": "moho"
}我试着这样查询,但它不起作用
{
"query": {
"match": {
"first_name": {
"query": "hosan",
"fuzziness": "AUTO:0,0"
}
}
}
}但如果我用"hoom","homoo“或"homos”搜索,它就会起作用。
有人能帮我做这个模糊搜索吗?谢谢!
发布于 2021-04-07 10:10:41
对于由5个字符组成的查询条件( hosan ),模糊值auto将只给出编辑距离值1,这不足以让您从hosan转换为homo。使用auto可以实现的最大编辑距离值是2,只有在查询条件大于5个字符时才能实现。您可以强制将模糊值设置为3或4以尝试实现所需的结果,但ES默认值为max 2的原因是,较高的数值可能会开始产生意想不到且难以操作的结果。还请注意,您的其他搜索示例(hoom、homoo等)仅在单词homo上匹配。默认情况下,匹配查询是OR查询,并且将返回任何匹配术语的结果。
仅供参考,对于长度为1-2个字符的查询条件,auto会给出0个编辑距离;对于3-5个字符的查询条件,会给出1个编辑距离;对于大于5个字符的查询条件,会给出2个编辑距离。
因此,我会将你的模糊值增加1,直到你在hosan上搜索时得到返回的结果,但只是为了证明我在这里概述的内容。我个人认为,在任何生产环境中,模糊值都不会超过2,也许3。
发布于 2021-04-07 16:59:22
经过对弹性搜索和模糊搜索的大量研究,我发现仅仅使用模糊搜索是不可能得到像“智人”这样带有搜索关键词"hosan“的结果的。然后,为了解决这个问题,我需要将elasticsearch中的模糊查询与正则查询相结合
https://stackoverflow.com/questions/66954537
复制相似问题