2012-03-01 50 views
2

我需要一種方法來獲取兩個組合字段名稱的構面。要告訴你我的意思是,看看查詢,因爲它是現在:Solr在多個級聯字段上刻面

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":16, 
    "params":{ 
     "facet":"true", 
     "indent":"true", 
     "q":"productId:(1 OR 2 OR 3 OR 4)", 
     "facet.field":["productMetaType", 
     "productId"], 
     "rows":"10"}}, 
    "response":{"numFound":4,"start":0,"docs":[ 
     { 
     "productId":1, 
     "productMetaType":"PRIMARY_PHOTO", 
     "url":"1_PRIM.JPG"}, 
     { 
     "productId":1, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"1_1.JPG"}, 
     { 
     "productId":1, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"1_2.JPG"}, 
     { 
     "productId":2, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"2_1.JPG"}] 
    }, 
    "facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{ 
     "productMetaType":[ 
     "PRIMARY_PHOTO",1, 
     "OTHER_PHOTO",3], 
     "productId":[ 
     "1",3, 
     "2",1]}, 
    "facet_dates":{}, 
    "facet_ranges":{} 
    } 
} 

我得到兩個小場,productMetaTypeproductId。我需要做的是以某種方式結合這些領域,所以我得到的數據如下:

1_PRIMARY_PHOTO, 1, 
1_OTHER_PHOTO, 2, 
2_PRIMARY_PHOTO, 0, 
2_OTHER_PHOTO, 1 

樞軸功能是否做到這一點?不幸的是,我們運行的是Solr 3.1,因此無法使用樞軸,但如果這是實現這一點的唯一方法,那麼我可能需要一些升級彈藥。

我唯一能想到的其他事情就是如何連接字段名稱。我是Solr新手,不知道什麼是可能的。任何意見或協助表示讚賞。感謝您的時間。

回答

4

是的,樞軸將工作的伎倆,但正如你所觀察到的,這個功能只在Solr中可用。

您的想法結合這兩個領域也將工作。其實,如果你的領域有值的數量有限,要做到這一點,最簡單,最靈活的方式是使用facet queries

  • 產品編號:1 AND productMetaType:PRIMARY_PHOTO
  • 產品編號:2和productMetaType:OTHER_PHOTO
  • 產品編號:1 AND productMetaType:OTHER_PHOTO
  • 產品編號:2和productMetaType:PRIMARY_PHOTO

否則,只是在你的Solr schema.xml中機智創建一個新的領域字符串類型,通過添加之前的文檔重新創建索引,但是使用這個新字段(您可以根據需要生成,使用'_'作爲兩個字段值之間的分隔符可以很好地工作)。

+0

這很棒!謝謝!現在,如果只有一種方法可以在響應中命名這些方面查詢,所以我不必分析查詢來找出在應用程序中處理數據的方式。無論如何,我可以完成這項工作。再次感謝! – Brad 2012-03-01 22:32:12

+0

我目前沒有Solr實例進行測試,但我認爲您可以在本地參數中使用** key **參數來執行此操作。請參閱http://wiki.apache.org/solr/SimpleFacetParameters#key_:_Changing_the_output_key – jpountz 2012-03-01 22:52:17

+0

謝謝,這也很好! – Brad 2012-03-02 02:23:12