0

我有一个列表,其大小不固定,可以包含任何编号。的项目。

根据列表中的项目数,我必须生成一个弹性搜索 AND 查询来查找值的完全匹配。

例如:

如果我的列表包含 2 项:['a', 'b'],我的弹性搜索查询应如下所示:

Q('term', field='a') & Q('term', field='b')

同样,如果我的列表包含 4 个项目:['a', 'b','c','d'];我的查询将如下所示:

Q('term', field='a') & Q('term', field='b') & Q('term', field='c') & Q('term', field='d')

根据列表大小生成这种查询的正确方法是什么?

PS:我正在使用elasticsearch_dsl模块的Q库来生成弹性搜索查询。

https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html

4

2 回答 2

0

最简单的方法是检查&操作产生的查询并直接重现。在这种情况下:Q('bool', must=[Q('term', field=x) for x in my_list])

于 2018-07-21T15:07:28.337 回答
0

我执行该&操作的解决方案是为列表中的每个项目生成match查询。

must = []
for item in my_list:    
    must.append({'match': {'field_name': item}})
query = Q('bool', must=must)
于 2018-07-23T17:30:26.163 回答