查询多个准确值

term 过滤器在查询单个值时很好用,但是你可能经常需要搜索多个值。比如你想寻找 20 或 30 元的文档,该怎么做呢?

比起使用多个 term 过滤器,你可以用一个 terms 过滤器。terms 过滤器是 term 过滤器的复数版本。它用起来和 term 差不多,我们现在来指定一组数值,而不是单一价格:

{
    "terms" : {
        "price" : [20, 30]
    }
}

term 过滤器一样,我们将它放在 filtered 查询中:

GET /my_store/products/_search
{
    "query" : {
        "filtered" : {
            "filter" : {
                "terms" : { <1>
                    "price" : [20, 30]
                }
            }
        }
    }
}
  • <1> 这是前面提到的 terms 过滤器,放置在 filtered 查询中

这条查询将返回第二,第三和第四个文档:

"hits" : [
    {
        "_id" :    "2",
        "_score" : 1.0,
        "_source" : {
          "price" :     20,
          "productID" : "KDKE-B-9947-#kL5"
        }
    },
    {
        "_id" :    "3",
        "_score" : 1.0,
        "_source" : {
          "price" :     30,
          "productID" : "JODL-X-1937-#pV7"
        }
    },
    {
        "_id":     "4",
        "_score":  1.0,
        "_source": {
           "price":     30,
           "productID": "QQPX-R-3956-#aD8"
        }
     }
]
下一节:理解 term 和 terms 是包含操作,而不是相等操作,这点非常重要。这意味着什么?