2012-01-08 134 views
3

的情景:SOLR多值字段

我有以下的(簡化)數據庫表的場景:

ID ProductName   ProductCategory Colour Price 
---------------------------------------------------------- 
1 BatmanTShirt   T-Shirt   Black 22 
2 BatmanTShirt   T-Shirt   Blue  20 
3 SupermanTShirt  T-Shirt   Blue  19 
4 SpidermanTrousers Trousers   Red  28 
5 SpidermanTrousers Trousers   Black 30 

我的願望:

在SOLR指數,我想這個數據將以規範化的方式進行映射,從而僅創建3個SOLR文檔(如下所示)而不是5個。

<doc1> 
    <ID>1</ID> 
    <ProductName>BatmanTShirt</ProductName> 
    <ProductCategory>T-Shirt</ProductCategory> 
    <OtherDetails>{ {1, Black, 22}, {2, Blue, 20} }</OtherDetails> 
</doc1> 
<doc2> 
    <ID>3</ID> 
    <ProductName>SupermanTShirt</ProductName> 
    <ProductCategory>T-Shirt</ProductCategory> 
    <OtherDetails>{ {3, Blue, 19} }</OtherDetails> 
</doc2> 
<doc3> 
    <ID>4</ID> 
    <ProductName>SpidermanTrousers</ProductName> 
    <ProductCategory>Trousers</ProductCategory> 
    <OtherDetails>{ {4, Red, 28}, {5, black, 30} }</OtherDetails> 
</doc3> 

一些注意事項:

  • <ID>將包含最小的ID從組
  • <OtherDetails>將包含一個唯一的ID加上被分組時留出了其他細節。這將是一個多值字段,數據類型爲List,包含另一個詳細信息列表{ID,Color,Price}。

問:

任何人都知道,這怎麼可能?

P.S.

做這種'分組'的原因是我想要在ProductCategory上面。如果我使用刻面的產品分類,目前所產生的計數將是:

T-Shirt (3) 
Trousers (2) 

我現在想的是對產品分類方面沒有顏色和價格等數據,我想只有2個T恤(之一蝙蝠俠和超人之一)和只有1個褲子(蜘蛛俠的)。所以我想表明的是:

T-Shirt (2) 
Trousers (1) 

我做了一些研究,發現這個功能(被稱爲後組刻面或矩陣計算)是目前WIP,如this SOLR patch指出。所以我想要一個臨時解決方法,因爲這可能需要一段時間才能完成。

回答

1

這個補丁適用於單值域,所以使用這個補丁和分組是最好的選擇。

只需索引數據庫中的數據即可,因此不需要使用多值字段。

您可以使用TortoiseSVN下載latest code並應用補丁。在Eclipse中構建WAR(或JAR)非常簡單。只需使用剛剛下載的代碼啓動新項目,然後在root和solr目錄中的build.xml中運行ant腳本。

+1

謝謝O. Klein爲你解答。我已經成功下載了ToirtoiseSVN的代碼。目前我正在用ANT構建它,但是我想像你剛纔提到的那樣將它導入到Eclipse中,你能否告訴我一些關於如何導入和編譯它的細節?謝謝。 – mrd3650 2012-01-09 15:22:54