当使用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知之甚少。
任何人都可以让我知道是否有传递变量值作为关键吗?
正如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()))
您可以将**
与字典一起使用。
....filter("term", **{key_variable_name: param1})