2013-10-20 31 views
1

比方說,我有以下文件:刻面得到一個對象的所有鍵在elasticsearch

{ 
    "title": "Some Title", 
    options: { 
     "key5": 1, 
     "key3": 0, 
     "key1": 1, 
    } 
}, 
{ 
    "title": "Some Title", 
    options: { 
     "key2": 0, 
     "key3": 0, 
     "key5": 1, 
    } 
} 

我想用面從options對象獲取的所有鍵。

如果options是按鍵的簡單數組作爲字符串,我想簡單的使用這樣的方面:

"facets" : { 
    "options" : { 
     "terms" : { 
      "field" : "options" 
     } 
    } 
} 

不過,這並不在我的情況下工作。

因此,如果query返回這兩個文件,我應該得到這些鍵:「KEY5」,「KEY3」,「KEY1」,「KEY2」]

我是不是真的需要什麼樣的小的?

+0

你想獲得什麼作爲你的方面的輸出? – javanna

回答

0

如果我正確理解你,你會想爲你的嵌套選項對象中的每個字段做一個terms_facet。一種「通配符面」?

我認爲在允許這種操作的方面api中沒有功能。如果我沒有弄錯,用於刻面的字段必須被映射,所以可能通過檢查索引映射來提取單獨查詢中的字段。

2

你不能這樣做,使用一個方面。 你有兩個選擇 -

  1. 保持當前的文檔結構,並從類型映射鍵(見http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-get-mapping.html)的列表。這帶來了你的類型的計劃,其中包含所有遇到的領域。

  2. 更改結構。保持鍵也作爲一個場,所以你的選擇陣列變得文件類似於數組:

    "options" :
    [
    { "key" : "key1", "value" : 1},
    { "key" : "key2", "value" : 0}
    ]

你可能會想,以保持鍵值對的上下文搜索或小面,所以當將其配置爲嵌套類型(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html)。 然後,您可以在「options.key」字段方面獲取頂級密鑰列表。

相關問題