根据列表大小(即编号)生成弹性搜索和查询。查询中AND的总和将基于否。列表中的项目

时间:2018-07-21 01:36:22

标签: python elasticsearch elasticsearch-dsl elasticsearch-query elasticsearch-dsl-py

我有一个列表,其大小不固定,可以包含任何数字。项。

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

例如:

如果我的列表包含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

2 个答案:

答案 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)