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

Generate elastic search AND query based upon list size i.e no. of AND's in the query will be based on no. of items in the list

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

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

例如:

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

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

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

must = []
for item in my_list:    
    must.append({'match': {'field_name': item}})
query = Q('bool', must=must)