2012-06-06 70 views
0

在solr查詢中執行groupby之後,我有以下格式的響應。我使用的solr版本3.5在創建陣列時更改密鑰的名稱

"grouped":{ 
    "channel_id":{ 
     "matches":48, 
     "ngroups":26, 
     "groups":[{ 
      "groupValue":"204", 
      "doclist":{"numFound":1,"start":0,"docs":[ 
       { 
       "channel_name":"ZeeTv", 
       "channel_num":4, 
       "title":"The Name", 
       "channel_id":"204" 
      }}, 
     { 
      "groupValue":"166", 
      "doclist":{"numFound":2,"start":0,"docs":[ 
       { 
       "channel_name":"Sony", 
       "channel_num":2, 
       "title":"The Name", 
       "channel_id":"166", 
       { 
       "channel_name":"Sony", 
       "channel_num":2, 
       "title":"The Puzzle", 
       "channel_id":"166" 
      }}]}} 

我正在在以下列方式的陣列響應:

for(var chl in data.grouped.channel_id.groups) { 
    config['playlist'].push(data.grouped.channel_id.groups[chl]['doclist']['docs']); 
} 

因此形成各groupValue的單個陣列。數組的struture是:

"0"=>{"0"=>"value"},"1"=>{"0"=>"result1","1"=>"result2"} 

但我想改變鍵名稱,即「0」,「1」,而創建一個數組,這樣我可以做config['playlist']['166']檢查所有的groupValue從響應從陣列中顯示此channel_id。可以做到這一點,如果是這樣做。我期待下面:

"204"=>{"0"=>"value"},"166"=>{"0"=>"result1","1"=>"result2"} 

而且如果可能的話可以Solr的查詢進行,使得在響應channel_num來按升序排列,即第一個結果爲channel_num 2,然後4.我已經做groupby:channel_id

回答

2

那呢?

for(var chl in data.grouped.channel_id.groups) { 
    config['playlist'][data.grouped.channel_id.groups[chl].groupValue] = data.grouped.channel_id.groups[chl]['doclist']['docs']; 
} 

推是在數組末尾添加一個元素。但是任何Javascript對象只是一個哈希表,所以你可以這樣使用它。

順便說一句,可以使代碼更簡單了for each

for each(var chl in data.grouped.channel_id.groups) { 
    config['playlist'][ch1.groupValue] = ch1['doclist']['docs']; 
} 
+1

您的第二個代碼塊在Firefox之外是無效的javascript。此外,所有for-each循環均缺少'hasOwnProperty'檢查。 –

+0

感謝第一個代碼塊爲我工作如預期 – user850234

+2

您不應該在陣列上使用'for' ...'in'。使用'len = data.grouped.channel_id.groups.length;代替(var chl = 0; chl

2

Pikrass已經正確地回答了...至於與channel_num排序而言嘗試添加查詢中的以下內容:

&sort=channel_num asc 
+0

不能同時接受兩個答案,所以投票給你。謝謝 – user850234