一尘不染

带有模糊性的多个字段上的ElasticSearch multi_match查询

elasticsearch

如何为模糊匹配查询添加模糊性?因此,如果有人要搜索“棒球”,它仍然会找到“棒球”文章。目前,我的查询如下所示:

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"
                    ]
                }
            }
        }
    }
}

我正在寻找的一种选择是执行类似的操作,只是不知道这是否是最佳选择。保持基于评分的排序很重要:

   "query" : { 
      "query_string" : { 
         "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
         "fuzzy_prefix_length" : 1 
      } 
   }

有什么建议吗?


阅读 1158

收藏
2020-06-22

共1个答案

一尘不染

要将模糊性添加到多查询中,您需要按以下说明添加模糊性属性:

{
    "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

                }
            }
        }
    }
}

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

不会被“模糊化”的初始字符数。这有助于减少必须检查的术语数量。预设为0。

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

2020-06-22