使用弹性搜索执行模糊搜索不能像特殊名称那样工作

时间:2014-05-27 14:16:25

标签: elasticsearch nest

我试图使用模糊搜索来查找艺术家名称,例如' p!nk'查询'粉红色'。我使用标准分析器索引艺术家名称字段并执行模糊搜索,如下例所示。但它会返回奇怪的结果。见下文...

{
  "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "artists": "pink"
                    }
                },
                {
                    "match": {
                        "artists": {
                            "query": "pink",
                            "fuzziness": "1"
                        }
                    }
                }
            ]
        }
    }
}

我同时做了一个'应该'查询和模糊的'查询所以我可以涵盖所有基础,他们得到适当的得分。 (不确定这是否正确)。

但我得到的结果非常奇怪。艺术家' p!nk'肯定是在我的索引中,因为我可以使用常规查询来检索它的正确拼写' p!nk',但是'粉红色'找不到它。

这是我的结果:

hits": {
 "total": 4,
 "max_score": 4.479847,
 "hits": [
     {
        "_index": "myindex",
        "_type": "mytype",
        "_id": "723721728656",
        "_score": 4.479847,
        "fields": {
           "artists": [
              "Pink Martini"
           ]
        }
     },
     {
        "_index": "myindex",
        "_type": "mytype",
        "_id": "888837349727",
        "_score": 0.9021777,
        "fields": {
           "artists": [
              "Kid Ink"
           ]
        }
     },
     {
        "_index": "myindex",
        "_type": "mytype",
        "_id": "888837168625",
        "_score": 0.7237221,
        "fields": {
           "artists": [
              "Daft Punk"
           ]
        }
     },
     {
        "_index": "myindex",
        "_type": "mytype",
        "_id": "888837168618",
        "_score": 0.7237221,
        "fields": {
           "artists": [
              "Daft Punk"
           ]
        }
     }
 ]
}

1 个答案:

答案 0 :(得分:0)

有可能删除!,以及您应用的分析器的其他特殊字符。尝试使用索引上的analyze API,看看p!nk是如何被标记化的。