我需要使用一组全局过滤器和扩展的OR子句在Elasticsearch中查询特定结果,其中OR子句中的每种情况都由特定的条件元组组成。换句话说,它是这样的:'获取与以下全局过滤器匹配的记录:category ='foo'和name ='bar'。从该集合中,获取记录,其中关键字(x,y,z)与以下任意项匹配:(1、2、3),(4、5、6)或(7、8、9)。
例如,如果我有以下项目:
Item 1:
category: foo, name: bar,
x: 1, y: 2, z: 3
Item 2:
category: foo, name: baz,
x: 1, y: 2, z: 3
Item 3:
category: foo, name: bar,
x: 4, y: 5, z: 6
Item 4:
category: foo, name: bar,
x: 10, y: 11, z: 12
搜索不应返回第2项(因为它失败了name ='bar'的全局条件)或第4项(因为它具有(x,y,z)=(10,11,12),不是以下项之一)我指定的/允许的元组)。它应该返回其他项,它们与全局条件都匹配,并且属于x,y,z值的指定/允许的元组列表。
我知道我可以为每个项目发出一个简单的查询;但我认为这样做效率很低,因为每次都需要指定10K元组或更多的数量。
抱歉,如果已经回答;现有的答案之一可能已经适合于此,但是我对于Elasticsearch来说还太陌生,无法识别如何做到这一点。
环境:Python 3.8中的elasticsearch 7.10.1。
干得好,
{
"query": {
"bool": {
"must": [
{
"term": {
"category": "foo"
}
},
{
"term": {
"name": "bar"
}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"x": 1
}
},
{
"term": {
"y": 2
}
},
{
"term": {
"z": 3
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"x": 4
}
},
{
"term": {
"y": 5
}
},
{
"term": {
"z": 6
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"x": 7
}
},
{
"term": {
"y": 8
}
},
{
"term": {
"z": 9
}
}
]
}
}
]
}
}
]
}
}
}
您所需要的只是bool查询,它带有must
andshould
子句的组合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句