ElasticSearch must_not查询返回分数= 1而不是0

时间:2019-03-21 09:34:29

标签: elasticsearch

我在official document中找到了关于must_not的一些描述

  

must_not子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。由于计分被忽略,因此所有文档的分数均 0

它告诉我must_not将返回 0 分数,就像filter操作一样。但是当我执行此查询时:

GET /my_idx/my_type/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match" : {"name": "Test"}}
      ]
    }
  }
}

响应显示:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 6,
    "max_score": 1,
    "hits": [
      {
        "_index": "my_idx",
        "_type": "my_type",
        "_id": "Nbs5nmkBAfzcjFMf2czR",
        "_score": 1,
        "_source": {
          "analyzer": "my_tokenizer",
          "text": "Doe"
        }
      },
...

您会看到"_score": 1

为什么会这样?

1 个答案:

答案 0 :(得分:0)

当过滤器中只有一个must_not时,将显示一个不可见的match_all。为什么得到_score = 1?