ElasticSearch使用Fuzziness查询多个字段的multi_match

Fun*_*ado 12 fuzzy-search elasticsearch

如何在multi_match查询中添加模糊性?因此,如果有人要搜索'basball',它仍会找到'棒球'文章.目前我的查询如下所示:

POST /newspaper/articles/_search
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑的一个选择是做这样的事情,只是不知道这是否是最好的选择.根据评分保持排序很重要:

   "query" : { 
      "query_string" : { 
         "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
         "fuzzy_prefix_length" : 1 
      } 
   } 
Run Code Online (Sandbox Code Playgroud)

建议?

小智 30

要向多查询添加模糊性,您需要添加模糊属性,如下所述:

{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ],
                    "fuzziness" : "AUTO",
                    "prefix_length" : 2

                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在文档中解释的prefix_length为:

不会"模糊化"的初始字符数.这有助于减少必须检查的术语数量.默认为0.

要检查模糊性的可能值,请访问ES文档.

  • 这在ES 6中不起作用:"类型[短语]"不允许模糊 (17认同)
  • 对于`[cross_fileds]`,`[phrase_prefix]` 也是 (3认同)