我有一个列表,其大小不固定,可以包含任何数字。项。
根据列表中的项目数,我必须生成一个弹性搜索和查询以找到值的完全匹配。
例如:
如果我的列表包含2个项目:['a', 'b']
,则我的弹性搜索查询应如下所示:
Q('term', field='a') & Q('term', field='b')
Similary,如果我的列表包含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
答案 0 :(得分:0)
最简单的方法是检查&
操作产生的查询并直接重现该查询。在这种情况下:Q('bool', must=[Q('term', field=x) for x in my_list])
答案 1 :(得分:0)
我执行&
操作的解决方案是针对列表中的每个项目生成match
查询。
must = []
for item in my_list:
must.append({'match': {'field_name': item}})
query = Q('bool', must=must)