Elasticsearch:获取字段中具有特定值的文档

Elasticsearch: getting documents with exactly a certain value in a field

我有一个包含一些重复文本内容的文档的索引,我需要检索具有完全相同值而不是相似值的文档。因此,例如,将以下每一行视为不同文档的 "text" 属性 的值:

所以我需要的是只检索标有 (*) 的两个文档。我试过了:

GET news/_search
{
  "_source": ["text"],
  "min_score": 1,
  "query": {
    "simple_query_string" : {
        "query": "The car",
        "fields": ["text"],
        "flags": "NONE",
        "minimum_should_match": "100%"
    }
  }
} 

但它总是检索所有 4 个文档。我也尝试了 match_phrase 并且得到了相同的结果。

PS:我需要能够 运行 两个查询:一个检索 4 个文档,另一个检索 2 个文档。

这是映射:

{
  "news" : {
    "aliases" : { },
    "mappings" : {
      "tweet" : {
        "properties" : {
          "text" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          ...
        }
      }
    }
  }
}

有什么想法吗?

谢谢

对于完全匹配,您应该在字段的关键字类型上使用 elasticsearch 的 Term Query。 将此用于 ex.

{
  "query": {
    "term": {
      "text.keyword": {
        "value": "The car"
      }
    }
  }
}

以上查询将 return 只有 2 个结果。但是如果你想获取所有结果,请使用 Match query

{
  "query": {
    "match": {
      "text": "The car"
    }
  }
}

这将 return 你所有的四个结果。

希望对您有所帮助