2012-03-28 124 views
2

我正在將數據從mysql拖入solr。其中一個字段是使用group_concat函數生成的,該函數生成逗號分隔字段,其中列出了事件的所有波段。當時我相信這是爲一個事件存儲多個樂隊的最佳方式。但是,我發現我無法面對所有事件的查詢。Solr方面用逗號分隔值的多個單詞

我已經設置了band字段的字符串和多值爲true。

<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/> 

結果是如預期,其中字符串被刻面作爲一個長的字符串。

「珍珠果醬,愛麗絲,尖叫樹,的EverClear」,1, 「博智,加加,培根位」,1, 「雄雞,雞翅,雞腿,尾羽」,1,

最大這種方法的問題是當字段類型是字符串時,它看起來不可搜索。似乎我需要創建一個重複的字段,類型text_general搜索和有一個面。是?

有沒有辦法爲band字段聲明一個分隔符來恰當地處理這個問題,或者我的方法是錯誤的?

回答

8

令牌化您的領域不會解決您的方面問題,您將能夠使用單個樂隊名稱進行搜索並獲得結果,但方面會更糟糕。基本規則是不使用任何標記或文本增強用於製作刻面的字段。

使用multiValued字段是很好的做法,但實際上只是將一個帶有列表的值放入它中,因爲您的查詢將該列表作爲單列映射到Solr中相關字段的單個值。

您可以保留group_concat輸出並通過簡單更改data-config.xml來解決您的問題,告訴Solr使用分隔符分割這些帶名稱。看一看在RegexTransformer及其splitBy參數:

splitBy:用於將一個字符串分解以獲得多個值,如果你與配置splitBy返回值

的 列表相同的分隔符你用於group_concat的技巧已經完成,你將有多個值,你的方面看起來不錯。

+0

工作就像一個魅力!所以這聽起來是我需要做的任何領域,我想要facet以及搜索是做一個未知的領域的方面和標記爲搜索。 – bikedorkseattle 2012-03-28 21:52:09

+0

+1我以爲你需要編寫一個應用程序來將字符串分成多個值。 – aitchnyu 2012-03-29 05:09:35

+1

我可以看到更新的模式嗎?我有確切的問題 – 2013-09-06 13:02:10