如何过滤掉弹性搜索中的多个命中?

时间:2016-06-23 18:10:11

标签: elasticsearch filter

我正在尝试创建一个过滤器,在我的弹性实例中按Id找到多个实体。

例如,我想找到包含ID为34,38和41的每个实体。

我的查询如下:

    {
      "query": {
        "filtered": {
          "filter": {
            "term": {
              "id":[34, 38, 41]
            }
         }
       }
     }    
   }

这只返回41实体而不是34,38和41.如何正确返回与列出的任何Id相匹配的结果?

1 个答案:

答案 0 :(得分:1)

当您的意思是term时,您正在使用terms。这是ES 1.x中的一个错误。

{
  "query": {
    "filtered": {
      "filter": {
        "terms": {
          "id": [34, 38, 41]
        }
      }
    }
  }
}

注意:在ES 2.x +中,此

{
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "id": [34, 38, 41]
        }
      }
    }
  }
}

唯一的变化是filtered成为bool