我使用弹性搜索大约一个月,我发现了一件我无法理解的查询fuzzie。
该场景是我在一个类型和索引上有一组近10万个项目的用户,我想搜索用户名,并在模糊模式下返回与搜索字符串匹配的所有项目,例如我的用户是“masterviana”如果我只使用文本“mastervi”进行搜索,我希望使用模糊查询在结果顶部看到masterviana吗?
"fuzzy" : {
"public_name" : {
"value" : "mastervi",
"boost" : 1.0,
"fuzziness" : 2,
"prefix_length" : 0,
"max_expansions": 100
}
}
但是我没有在第一页看到我的用户名(masterviana),而且我看到的用户名与我的查询字符串“不太相似”,我将只显示前5个未点击的内容。交
{
"_index": "username",
"_type": "username",
"_id": "2061|FZ4y1t042482S3EqobiVllmv00",
"_score": 9.198499,
"_source": {
"public_name": "masterv",
"bbid": "FZ4y1t042482S3EqobiVllmv00",
"hash": 2061,
"avata": "http://goo.gl/4CRt3v"
}
},
{
"_index": "username",
"_type": "username",
"_id": "2048|r0I5XZ31076phruMS1gu9Hjv00",
"_score": 5.9688096,
"_source": {
"public_name": "project--master",
"bbid": "r0I5XZ31076phruMS1gu9Hjv00",
"hash": 2048,
"avata": "http://goo.gl/4CRt3vr"
}
},
{
"_index": "username",
"_type": "username",
"_id": "1980|W5Wal166832UV5oCqUH9Vjcv00",
"_score": 5.7984095,
"_source": {
"public_name": "masterjv",
"bbid": "W5Wal166832UV5oCqUH9Vjcv00",
"hash": 1980,
"avata": "http://goo.gl/4CRt3v"
}
},
{
"_index": "username",
"_type": "username",
"_id": "2108|Kufhm899338GPWHsuoei1HOv00",
"_score": 5.7984095,
"_source": {
"public_name": "master25",
"bbid": "Kufhm899338GPWHsuoei1HOv00",
"hash": 2108,
"avata": "http://goo.gl/4CRt3v"
}
},
{
"_index": "username",
"_type": "username",
"_id": "1952|AtPw2a97575sC5JT406msOXv00",
"_score": 5.7984095,
"_source": {
"public_name": "masterpiz",
"bbid": "AtPw2a97575sC5JT406msOXv00",
"hash": 1952,
"avata": "http://goo.gl/4CRt3v"
}
},
你可以看到我进入顶部1. masterv 2. project-master我认为我的查询“mastervi”更接近“masterviana”,例如“masterv”或“project-master”
如果我使用完全相同的文字搜索“masterviana”,我还会得到这个项目
答案 0 :(得分:1)
排名是编辑距离和(通常无益)一个术语的罕见程度的混合。 我不确定在这种情况下应该归咎于哪一个,但是稀缺排名一词是一个长期存在的Lucene问题。使用FuzzyLikeThisQuery进行弹性搜索的解决方法,但可能不会存在更长时间,因此这加快了修复Lucene的需求(请参阅此处了解背景https://github.com/elastic/elasticsearch/pull/10391)