如何使用OR运算符打开Elasticserach的列表?

2024-04-20 03:14:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的术语查询列表

term_query = [
    Terms(metadata__resource_type__subtype=["publication-softwaredocumentation"]),
    Terms(metadata__resource_type__type=["dataset"]),
]

我必须对这两个查询应用post_filter,这两个查询看起来像这样

search = search.post_filter(term_query[0] | term_query[1])

我想处理term_query将有0或更多元素的情况。如何在post_filter中解包由OR运算符分隔的列表


1条回答
网友
1楼 · 发布于 2024-04-20 03:14:38

在等待答案的同时,我搜索了python本身中可用的任何方法来实现这一点

我发现itertoolsoperator模块运行良好

解决方案如下所示

import itertools, operator

term_queries = [
    Terms(metadata__resource_type__subtype=["publication-softwaredocumentation"]),
    Terms(metadata__resource_type__type=["dataset"]),
]

final_query = list(itertools.accumulate(term_queries, operator.or_))[-1]
search = search.post_filter(final_query)

相关问题 更多 >