弹性搜索模糊查询奇怪的结果

时间:2015-04-15 14:53:24

标签: elasticsearch fuzzy-search

我使用弹性搜索大约一个月,我发现了一件我无法理解的查询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”,我还会得到这个项目

1 个答案:

答案 0 :(得分:1)

排名是编辑距离和(通常无益)一个术语的罕见程度的混合。 我不确定在这种情况下应该归咎于哪一个,但是稀缺排名一词是一个长期存在的Lucene问题。使用FuzzyLikeThisQuery进行弹性搜索的解决方法,但可能不会存在更长时间,因此这加快了修复Lucene的需求(请参阅此处了解背景https://github.com/elastic/elasticsearch/pull/10391