2012-01-25 43 views
1

場景:Solr的copyField夾雜RegexTransformer

在我有分隔的一個名爲分類領域哪種類型的字符串,幷包含了許多數字管道,如1|8|90|130|

我想要什麼數據庫:

在Solr的指標,我想有2個字段:

  • 領域分類 _ 這將包含完全匹配的字符串作爲DB即1|8|90|130|
  • 領域分類這將是包含值1,8,90和130型INT的一個多值字段

對於後者,在實體規範我可以使用一個regexTransformer然後我指定的以下字段中的數據的config.xml: <field column="Categories" name="Navigation" splitBy="\|"/>然後指定字段作爲多值在schema.xml中

我不知道的是我怎麼能'複製'相同的領域兩次,只執行一個正則表達式分裂。我知道有可以在schema.xml中定義的copyField工具,但是我找不到一種方法來轉換複製的字段,因爲根據我所知(我可能在這裏錯了),變換器只能在實體規範中使用。

作爲一種變通方法我還可以從實體的查詢,但在現實中,場分類發送相同的字段兩次是計算字段(選擇嵌套的)這是有點昂貴,因此我想避免它。

任何幫助表示讚賞,謝謝。

回答

1

而不是在data-config.xml拆分它。您可以在schema.xml中這樣做。這裏是你能做什麼,

  1. 創建字段類型與標記生成器PatternTokenizerFactory使用正則表達式來分割基於|
  2. FieldSplit:創建使用該new fieldType一個multivalued場,最終將有1,8,90,130
  3. FieldOriginal:創建字符串字段(如果你需要在沒有分析),可以保留原來的值1 | 8 | 90 | 130 |
  4. 現在您可以使用copyField根據需要複製FieldSplit,FieldOriginal值。

檢查這個Question,它是類似的。

+0

感謝您的回答,但是我對第3點有疑問。雖然它是一個多值字段,但'stored'值仍然只是'1 | 8 | 90 | 130'的一個值。標記器對存儲的值沒有任何作用,它改變了該值的索引的內部結構。事實上,這就是你引用的問題所說的。 – mrd3650

+1

我可能是錯的,但我不認爲PatternTokenizerFactory適用於複製字段的*存儲值*,至少這是我似乎遇到的問題。正則表達式效果在facet中顯示,但不在FieldSplit的存儲值中。 – ghukill

1

您可以從相同的數據創建兩列並分別對待它們。

所選擇的類別,類別,categories_pipe FROM category_table

然後,可以拆分「類別」一欄,而索引的另一個原樣。