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

标签 elasticsearch fuzzy-search

如何为 multi_match 查询添加模糊性?因此,如果有人要搜索“basball”,它仍然会找到“baseball”文章。目前我的查询是这样的:

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

建议?

最佳答案

要向多查询添加模糊性,您需要按照此处所述添加模糊性属性:

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

关于具有模糊性的多个字段的 ElasticSearch multi_match 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632339/

相关文章:

ruby-on-rails-3 - 在 Elasticsearch 中加入/拆分搜索词(使用轮胎)

php - Elasticsearch 模糊匹配,精确匹配最先显示

java - 如何修复log4j中的 “NoSuchMethodError”错误

docker - 适用于 Windows 的 Docker Desktop 上的 Elasticsearch

amazon-web-services - Elastic Search 过滤查询空值

python - 检查同一列中是否有相似的字符串

javascript - MongoDB部分匹配

elasticsearch - 需要帮助来编写Elasticsearch查询,该查询应基于具有(传递的值或null)的一个字段和另一个数组字段的文本进行搜索

java - 枚举作为映射键转换在 Spring Boot 2.4.1 和 Elastic Search 7.10 中不起作用

Elasticsearch 时间范围查询和数据