首页 > 解决方案 > Elasticsearch 每字段提升、通配符和显式字段匹配冲突

问题描述

Elasticsearch 中的一些查询为带有提升的字段提供通配符匹配,例如,simple_query_string query. 在我们的用例中,我们希望提升特定字段,同时将所有其他字段的分数设为 0。我们认为这可以通过以下示例查询模式来实现:

GET /kibana_sample_data_ecommerce/_search
{
  "profile": "true",
  "query": {
    "simple_query_string": {
      "query": "Eddie",
      "fields": [
        "*^0",
        "customer_full_name^100"
      ]
    }
  }
}

但是,如果多个字段定义通过通配符匹配相同的字段名称,则它们的提升会成倍增加。上面的示例将为所有文档生成 0 分,即使它们在customer_full_name字段中包含标记“Eddie”。

以下示例演示了提升成倍增加:

GET /kibana_sample_data_ecommerce/_search
{
  "profile": "true",
  "query": {
    "simple_query_string": {
      "query": "Eddie",
      "fields": [
        "*^0.1",
        "customer_full_name^100"
      ]
    }
  }
}

它导致(customer_full_name:eddie)^10.0查询的配置文件解释中的表达式。

这是否意味着不可能通过现场提升来实现我们想要的结果?期望的结果是:特定字段中的所有匹配项的分数都乘以 100,而其他字段中匹配的所有文档仍然返回,但分数为 0。

标签: elasticsearch

解决方案


推荐阅读