2011-10-04 37 views
0

我在我的數據庫中有一個產品表,以及一個包含此產品功能的表。特徵表有3列:id,類型和值。 Id是產品的外鍵。 我的桌子上的數據示例: 桌子產品:如何在Solr中索引像列一樣的行

ID |說明|

01計算機A

02汽車

03計算機B

表特點:

ID |類型|值|

01處理器的Phenom X3

01內存2GB

01 HDD 500GB

02顏色藍色

02馬克·福特

03處理器的Phenom X3

03內存3GB

我要編制索引的最佳方式,所以,一個例如,當有人爲「計算機」搜索,所述刻面所示:

的Phenom X3(2)

內存2GB(1)

3GB內存(1)

HDD 500GB(1)

等等,查詢字符串相關。如果我用字符串「處理器」進行查詢,只有當這個產品(描述中的「處理器」)具有像處理器:Phenom X3這樣的功能時,它纔會列出Phenom X3(1)。有很多產品類型,所以我們不能爲所有功能創建靜態列並將它傳遞給Solr ... 我希望我的問題很清楚,在此先感謝!

回答

0

使用數據導入處理程序索引的數據@http://wiki.apache.org/solr/DataImportHandler

您可以定義產品表作爲主要的實體和特點子實體。這樣具有功能的產品將被編入索引爲單個文檔。

索引 - 定義描述字段作爲索引真正 當你想在類型和值方面,您可以定義類型爲字符串,並在CONCAT dataconfig.xml type_value的類型和價值領域的一個新領域type_value將是一個多值場。

用於搜索 - 使產品說明字段可搜索例如q =說明:computers
您可以在solrconfig.xml中以適當的權重對其進行配置

將要素字段定義爲構面字段和構面。field = type_value

我希望這能給出一個公平的想法。

+0

太棒了,它幫了很多。我已經用templatetransformer完成了concat,但似乎type_value字段下的數據索引錯誤。我得到了「amd Phenom X 3 intel I 5」(全部剝離)而不是像「Amd:Phenomx3 intel:i5」。另外,還有一種方法可以檢查Solr什麼是索引,就像在DB上查詢一樣,當返回行時? –

+0

好吧,經過一番研究,我找到了答案:使用tokenizer類solr.KeywordTokenizerFactory。這使得concat很好用(solr.WhitespaceTokenizerFactory分割每個空白)。 另外,我正在使用Luke來查看索引的內容。我認爲還有另一種方式可以做到這一點,但我對他的所作所爲感到滿意。謝謝! –