首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python elasticsearch-dsl动态构建匹配查询

Python elasticsearch-dsl动态构建匹配查询
EN

Stack Overflow用户
提问于 2021-05-11 06:57:09
回答 1查看 160关注 0票数 0

使用ElasticSearch 6.xelasticsearch-dsl python包

我正在尝试生成一个带有options表单和query元素的match查询。

我有一个字段列表fields = ['field_1', 'field_2'],并且我正在尝试使用以下方法构建一个叶match查询

代码语言:javascript
复制
from elasticsearch_dsl.query import MultiMatch, Match, ConstantScore

def _get_match(tokens, fields, boost):        
        for index in range(len(fields)):
                field = fields[index]
                print(Match(field={"query": tokens[index], "boost": boost}))


tokens = ['token_1', 'token_2']
fields = ['field_1', 'field_2']
boost = 3
_get_match(tokens, fields, boost) 

生成的输出:

代码语言:javascript
复制
Match(field={'query': 'token_1', 'boost': 3})
Match(field={'query': 'token_2', 'boost': 3})

预期输出:

代码语言:javascript
复制
Match(field_1={'query': 'token_1', 'boost': 3})
Match(field_2={'query': 'token_2', 'boost': 3})

请注意,字段值而不是数组中传递的字段值,生成的查询直接使用变量名。如何动态生成匹配查询?

如果我使用这个SO Post中提到的**,它确实会创建一个动态查询,但它采用的是简化格式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 18:40:57

您已经提到了用于解压缩字典的**。运行正常,我只更改了一行:

代码语言:javascript
复制
print(Match(** {field: {"query": tokens[index], "boost": boost}}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67478571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档