如何在elasticsearch_dsl的Q查询中使用变量作为字段名?
如何在elasticsearch_dsl的Q查询中使用变量作为字段名
当然可以实现动态字段名的查询!不过你直接写的Q("range", field_name={"lte": 0.3})是行不通的——Python会把field_name当成字面意义上的字段名,而不是你变量里存储的"topic_12"。
解决方法很简单,利用Python的**字典解包特性来传递动态的关键字参数:
方法一:分步构造字典
from elasticsearch_dsl import Q field_name = "topic_12" # 先创建以变量值为键的字典 range_query_dict = {field_name: {"lte": 0.3}} # 通过**解包字典传递给Q函数 clause = Q("range", **range_query_dict)
方法二:一行简写
如果追求简洁,也可以直接在Q函数里构造并解包字典:
field_name = "topic_12" clause = Q("range", **{field_name: {"lte": 0.3}})
这样clause就会生成和Q("range", topic_12={"lte": 0.3})完全等价的查询语句,完美实现用变量动态指定字段名的需求。
内容的提问来源于stack exchange,提问作者FrancMo
相关产品推荐
相关产品推荐

