【发布时间】:2020-12-17 11:43:13
【问题描述】:
我需要使用一组全局过滤器和一个扩展的 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 元组或更多。
如果这个问题已经得到解答,我们深表歉意;现有答案之一可能已经适用于此,但我对弹性搜索太陌生,无法识别如何做到这一点。
环境:Python 3.8 中的 elasticsearch 7.10.1。
【问题讨论】:
标签: elasticsearch