2015-06-01 98 views
0

比方說,有在我的索引文件文字是這樣的:如何在所有文檔中查詢與鍵關聯的值?

{  
    "properties":[ 
    { 
    "name":"foo", 
    "value":"2" 
    }, 
    { 
    "name":"boo", 
    "value":"sausage" 
    } 
    ] 
}, 
{  
    "properties":[ 
    { 
    "name":"foo", 
    "value":"8" 
    }, 
    { 
    "name":"boo", 
    "value":"chicken" 
    } 
    ] 
} 

我想查詢索引的方式來回報各界properties.name與所有關聯properties.value值。所以結果應該包含這樣的內容:

{ 
    "foo":["2","8"], 
    "boo":["chicken","sausage"] 
} 

我該如何得到這樣的結果?

更新:我可以通過單個查詢來實現嗎?

回答

1

您可以使用multi search API

$ cat requests 
{"index" : "test"} 
{"fields" : ["value"], "query" : {"term": {"properties.name": "foo"}}, "from" : 0, "size" : 1000} 
{"index" : "test"} 
{"fields" : ["value"], "query" : {"term" : {"properties.name": "boo"}}, , "from" : 0, "size" : 1000} 

$ curl -XGET localhost:9200/_msearch --data-binary @requests; 

或者你可以使用bool查詢:

$ curl -XGET localhost:9200/test/type -d 
'{ 
    "from": 0, "size": 1000, 
    "query": { 
    "bool": { 
     "should": [ 
        { "match": { "properties.name": "foo" }}, 
        { "match": { "properties.name": "boo" }} 
     ] 
    } 
    } 
} 

,但你需要自己來篩選值。

+0

非常感謝!在你的情況下,我不得不做兩個請求 - 一個獲取所有密鑰,第二個獲取相應的值。我可以在一個查詢中做到嗎? – dajood

+0

我想你也可以用'bool'查詢來做同樣的事情。但你需要自己過濾查詢結果。 – chengpohi

相關問題