我正在尝试使用一些数据设置 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
字段的文档一样,但它似乎并没有做太多,只是不断返回我的竖线分隔列表。
我正在尝试做的事情是否可行,如果可行,我哪里出错了?
谢谢, 阿马尔
最佳答案
使用 PatternTokenizer
将仅更改内部表示而不更改存储的值。如果您希望 Solr 将其视为具有多个可显示值的多值字段,那么您需要发送 3 个不同的 cat
字段。
如果您正在使用 DataImportHandler
,那么您可以使用 RegexTransformer
来拆分数据。
关于xml - Solr 索引在分隔符上拆分字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5502421/