2011-03-31 81 views
5

我想設置一個索引與一些數據,但是我想發送我的領域之一作爲管道分隔,並在Solr結束分裂,例如Solr索引分割字段在分隔符

<doc> 
<add> 
    <field name="cat">a|b|c<field> 
</add> 
</doc> 

對於多值字段聲明爲

<field name="cat" type="str_split_on_pipe" indexed="true" stored="true" multiValued="true" omitNorms="true" /> 

而且在管式分離是

<fieldType name="str_split_on_pipe" class="solr.TextField" positionIncrementGap="100" > 
    <analyzer type="index"> 
     <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>--> 
     <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes 
    possible with WordDelimiterFilter in conjuncton with stemming. --> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>--> 
     <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes 
    possible with WordDelimiterFilter in conjuncton with stemming. --> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
</fieldType> 

我希望這是相同的,如果我發送文檔與三個不同的cat字段,但它似乎並沒有做太多,只是不斷返回我的管道分隔列表。

是我想要做的事情,如果是的話,我在哪裏出錯了?

謝謝, 阿瑪爾

回答

9

使用PatternTokenizer將僅改變內部表示,而不是存儲的值。如果您希望Solr將其視爲具有多個可顯示值的多值字段,則需要發送3個不同的cat字段。

如果您使用的是DataImportHandler,那麼您可以使用RegexTransformer來拆分數據。

+0

謝謝,'DataImportHandler'正是我所追求的! – amarsuperstar 2011-04-01 09:44:16

+0

請記住,RegexTransformer是一個正則表達式,所以如果你需要通過管道分割,例如,你必須將它們轉義(splitBy =「\ |」) – KinSlayerUY 2015-12-07 20:35:02