我的产品已使用以下
索引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
= A1
和text
为pc
或mac
key
= A2
和number
介于22
和28
这应该给我product_id
1
,2
和3
,但不是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
但是如果我把我的范围放进去,它就不再起作用了
答案 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"
}
}
}
}