寻找多个精确值

时间:2019-02-12 14:10:34

标签: elasticsearch

我想查询弹性搜索,查询字段是否为列表之一 我如何在Elastic 6.0.0中做到这一点? 例如,这些是我的文档:

{"name" : "jim","company": "a"}
{"name" : "jack","company": "a"}
{"name" : "joe","company": "b"}
{"name" : "foo","company": "b"}
{"name" : "bar","company": "c"}
{"name" : "boe","company": "c"}
{"name" : "jee","company": "d"}

Id喜欢返回所有公司为ab的条目

我尝试过:

curl  -u elastic:password -XPOST 'localhost:9243/my-index/_search?size=2000&pretty' -H 'Content-Type: application/json' -d'
{
  "size": 2000,
  "query": {
    "bool": {
      "must": [
        {"term": {"company": ["a","b"]}}

      ]
    }
  }
}'

但我收到错误消息[term] query does not support array of values

注意:我需要一个可以让我使用数组的解决方案,因为我需要匹配约100个选项(在上面的示例中为100个公司)

1 个答案:

答案 0 :(得分:2)

Terms query是您要寻找的。

term替换为terms。 Term不接受数组,而terms接受。

{
  "size": 2000,
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "company": ["a","b"]
          }
        }
      ]
    }
  }
}