在 elasticsearch-dsl-py 中使用变量作为过滤词键
Using variable for filter term key in 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了解不多。
任何人都可以告诉我这里是否可以将变量值作为键传递?
您可以使用 **
和字典。
....filter("term", **{key_variable_name: param1})
正如 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()))
当使用 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了解不多。
任何人都可以告诉我这里是否可以将变量值作为键传递?
您可以使用 **
和字典。
....filter("term", **{key_variable_name: param1})
正如 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()))