【问题标题】:Using variable for filter term key in elasticsearch-dsl-py在 elasticsearch-dsl-py 中使用变量作为过滤器词键
【发布时间】:2018-01-02 10:27:42
【问题描述】:

使用 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了解不多。

谁能告诉我这里是否有将变量值作为键传递?

【问题讨论】:

  • 请不要发布代码截图。

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


【解决方案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()))

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多