我需要使用一组全局过滤器和一个扩展的 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
Run Code Online (Sandbox Code Playgroud)
搜索不应返回项目 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
}
}
]
}
}
]
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
您所需要的只是boolmust查询,以及和子句的组合should。
| 归档时间: |
|
| 查看次数: |
5880 次 |
| 最近记录: |