查找文本等于且在请求范围之间的产品

时间:2018-03-23 09:46:38

标签: elasticsearch

我的产品已使用以下

索引
product_id | key | text   | number
1          | A1  | pc     | <null>
1          | A1  | mac    | <null>
1          | A2  | <null> | 23
1          | A2  | <null> | 30
2          | A1  | pc     | <null>
3          | A2  | <null> | 25
4          | A2  | <null> | 32
4          | A1  | linux  | <null>

现在我想找到

的产品
  • key = A1textpcmac
  • key = A2number介于2228
  • 之间

这应该给我product_id 123,但不是product_id 4,因为它不在范围内,也没有A1 {{{{ 1}}

我的索引是

A1

如果仅选择了text: { type: keyword, index: not_analyzed } number: { type: float, index: not_analyzed } product_id: { type: integer, index: not_analyzed } key: { type: keyword, index: not_analyzed }

,则以下作品非常完美
text

但是如果我把我的范围放进去,它就不再起作用了

1 个答案:

答案 0 :(得分:0)

您可以在下面的should子句中使用这两个条件,然后只需应用聚合。

{
   "size": 0,
   "query": {
      "bool": {
         "should": [
            {
               "bool": {
                  "must": [
                     {
                        "term": {
                           "key": "A1"
                        }
                     },
                     {
                        "terms": {
                           "text": [
                              "pc",
                              "mac"
                           ]
                        }
                     }
                  ]
               }
            },
            {
               "bool": {
                  "must": [
                     {
                        "term": {
                           "key": "A2"
                        }
                     },
                     {
                        "range": {
                           "number": {
                              "gte": 22,
                              "lte": 28
                           }
                        }
                     }
                  ]
               }
            }
         ]
      }
   },
   "aggs": {
      "PRODUCT_IDs": {
         "terms": {
            "field": "product_id"
         }
      }
   }
}