查询多个准确值

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

比起使用多个 term 过滤器,你可以用一个 terms 过滤器。terms 过滤器是 term 过滤器的复数版本。

它用起来和 term 差不多,我们现在来指定一组数值,而不是单一价格:

  1. {
  2. "terms" : {
  3. "price" : [20, 30]
  4. }
  5. }

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

  1. GET /my_store/products/_search
  2. {
  3. "query" : {
  4. "filtered" : {
  5. "filter" : {
  6. "terms" : { <1>
  7. "price" : [20, 30]
  8. }
  9. }
  10. }
  11. }
  12. }

<1> 这是前面提到的 terms 过滤器,放置在 filtered 查询中

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

  1. "hits" : [
  2. {
  3. "_id" : "2",
  4. "_score" : 1.0,
  5. "_source" : {
  6. "price" : 20,
  7. "productID" : "KDKE-B-9947-#kL5"
  8. }
  9. },
  10. {
  11. "_id" : "3",
  12. "_score" : 1.0,
  13. "_source" : {
  14. "price" : 30,
  15. "productID" : "JODL-X-1937-#pV7"
  16. }
  17. },
  18. {
  19. "_id": "4",
  20. "_score": 1.0,
  21. "_source": {
  22. "price": 30,
  23. "productID": "QQPX-R-3956-#aD8"
  24. }
  25. }
  26. ]