-1

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

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没有太多了解。

任何人都可以让我知道是否有将变量值作为键传递给我吗?

4

2 回答 2

2

正如 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()))
于 2018-01-02T11:32:55.653 回答
1

您可以**为此使用字典。

....filter("term", **{key_variable_name: param1})
于 2018-01-02T10:42:19.110 回答