在elasticsearch-dsl-py中使用变量作为过滤条件键

时间:2018-01-02 10:27:42

标签: python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

使用elasticsearch-dsl python api时,有没有办法在变量中将变量作为键传递。 请查看下面的代码。

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

es_client = Elasticsearch(['http://10.220.3.40'], port='9200')
param1 = 'xyz'
s = Search(using=es_client, index="index1", doc_type="sampledoc").filter("term", Key=param1)

print("Query 1 :"+str(s.to_dict()))
key_varialble_name = 'Key2'
s = Search(using=es_client, index="index1", doc_type="sampledoc").filter("term", key_varialble_name=param1)
print("Query 2 :"+str(s.to_dict()))

此处,名为' key_varialble_name' 的变量的值已分配为' Key2'

但是当在过滤器中使用时,该值不会被替换,因此术语键包含变量名称(即' key_varialble_name' )而不是变量价值(即' Key2' )。

我对python知之甚少。

任何人都可以告诉我,无论如何都要将变量值作为密钥传递给你吗?

2 个答案:

答案 0 :(得分:1)

您可以将**与字典一起使用。

....filter("term", **{key_variable_name: param1})

答案 1 :(得分:1)

正如Daniel建议的那样,使用传递字典对象来传递键值对,它会起作用。您的更改代码将如下所示。

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

es_client = Elasticsearch(['http://10.220.3.40'], port='9200')
param1 = 'xyz'
s = Search(using=es_client, index="index1", doc_type="sampledoc").filter("term", Key=param1)

print("Query 1 :"+str(s.to_dict()))
dictionary_variable = {"Key2":param1}

s = Search(using=es_client, index="index1", doc_type="sampledoc").filter("term", ** dictionary_variable)
print("Query 2 :"+str(s.to_dict()))