2017-04-08 103 views
1

嗨執行嵌套搜索我想用elasticsearch DSL文檔字段已經嵌套在它的JSON數據,所以我想從它特定的嵌套鍵值等,以執行嵌套搜索 -使用elasticsearch DSL

下面是文檔: -

{ 
    "_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 = [ '名稱', '標記']

輸出應該是這樣的 - > { 「名稱」: 「Mayank」, 「標誌」: 「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對象。

有人可以指導我嗎?

+0

你是什麼意思 「{」 名 「:」 Mayank 「」標誌 「:」 80 「}」。根據你的說法,你不能說出彈性休息API來模擬響應。這違反了REST api設計。要過濾字段,您可以使用「stored_fields」。但響應的結構是有彈性​​的,並遵循REST API設計。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-stored-fields.html – user3775217

+0

我不想構造響應,但可以在「數據」中看到嵌套字段鍵。 ''_source「:{」data「:{...},」last_updated「:」「}'。我只想從「數據」鍵ex得到特定的字段。 「名稱」鍵值或「標記」鍵值我的代碼返回整個「數據」鍵值,即「數據」鍵中的所有字段。 –

回答

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'}

相關問題