2012-06-06 36 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