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

时间:2019-07-31 12:08:13

标签: elasticsearch kibana

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

  • 汽车撞坏了
  • 汽车(*)
  • 他开汽车
  • 汽车(*)

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

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

有什么主意吗?

谢谢

1 个答案:

答案 0 :(得分:1)

对于完全匹配,您应该对字段的关键字类型进行Term Query的elasticsearch。 使用此作为示例。

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

上面的查询将仅返回2个结果。但是,如果要获取所有结果,请进行Match查询

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

这将返回所有四个结果。

希望这会有所帮助