首页 > 解决方案 > 如何使用 OR 运算符解压缩 Elasticserach 的列表?

问题描述

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

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或更多元素的情况。如何解压缩由OR运算符分隔的列表post_filter

标签: pythonpython-3.xlistelasticsearch

解决方案


在等待答案的同时,我搜索了 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)


推荐阅读