代码之家  ›  专栏  ›  技术社区  ›  dina

求多个精确值

  •  2
  • dina  · 技术社区  · 5 年前

    我想查询弹性搜索,查询字段是否是列表之一 如何在弹性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"}
    
    

    我想返回所有有公司的条目 a b

    我试过了:

    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 回复  |  直到 5 年前
        1
  •  2
  •   Nishant    5 年前

    Terms query 是您要找的。

    替换 term 具有 terms . term不接受array,而terms接受array。

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