使用elasticsearch dsl执行嵌套搜索

时间:2017-04-08 20:46:43

标签: python json linux elasticsearch elasticsearch-py

您好我想使用elasticsearch dsl执行嵌套搜索,其中文档字段中嵌入了json数据,因此我想要特定的嵌套键值,如 -

以下是文件: -

{
  "_index" : "data",
  "_type" : "users",
  "_id" : "15",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "data" : {
      "Gender" : "M",
      "Marks" : "80",
      "name" : "Mayank",
      "Address" : "India"
    },
    "last_updated" : "2017-04-09T01:54:33.764573"
  }
}

我只想要存储在数组中的字段值。

fields_want = ['name','Marks']

输出应该像 - > {“name”:“Mayank”,“Marks”:“80”}

Elasticsearch dsl文档对我来说很难理解。 https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#

Dsl代码: -

client = Elasticsearch()
s = Search(using=client, index="data") \
    .query("match", _type="users") \
    .query("match", _id=15)
response = s.execute()
for hit in s:
    print(hit.data)

从这段代码中我可以得到数据字段下的整个json对象。

有人可以在这里指导我吗?

1 个答案:

答案 0 :(得分:0)

它解决了。 我使用了源过滤器来获得嵌套输出。

client = Elasticsearch()
s = Search(using=client, index="data") \
    .query("match", _type="users") \
    .query("match", _id=15) \
    .source(['data.Name', 'data.Marks'])
response = s.execute()
print response

输出 -

{u'Name': u'Mayank', u'Marks': u'80'}