2

有没有办法在弹性搜索的布尔查询中将最低分数应用于必须子句。

我希望能够做这样的事情:

{
  "query": {
     "bool": {
        "must": [
            {
              "match": {
                 "name": {
                    "query":"A Name",
                    "min_score": 0.3
                 }
               }
            },
            {
              "match": {
                 "address": {
                    "query":"1 Somewhere Street, Somewhereset, UK",
                    "min_score": 0.3
                 }
               }
            }
        ]
    }
  }
}

这将要求名称查询与分数 > 0.3 匹配,地址查询与分数 > 0.3 匹配,才能返回文档。这是为了阻止返回非常好的名称匹配,尽管地址匹配很糟糕(例如,仅匹配 1),反之亦然。

我目前正在使用 Elasticsearch 1.5,但我过去也希望在 2.3 中使用它。

4

2 回答 2

3

试试这个,让我知道它是否有效:

{
  "query": {
    "bool": {
      "must": [
        {
          "function_score": {
            "query": {
              "match": {
                "name": {
                  "query": "A Name"
                }
              }
            },
            "min_score": 0.3
          }
        },
        {
          "function_score": {
            "query": {
              "match": {
                "address": {
                  "query": "1 Somewhere Street, Somewhereset, UK"
                }
              }
            },
            "min_score": 0.3
          }
        }
      ]
    }
  }
}
于 2016-07-21T21:07:53.580 回答
0

似乎查询的分数是从所有组合的字段中计算出来的。您可以使用函数查询中的 script_score 更改分数的计算方式:https ://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-脚本分数

但是,您似乎不太可能单独访问每个字段结果的分数。

于 2016-07-21T13:11:34.303 回答