所以我试图在我的Solr架构中有一个自定义字段,它以某种方式被过滤和处理,但似乎没有用。
<fieldType name="removeWhitespace" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="\s" replacement="" replace="all" />
</analyzer>
</fieldType>
<field name="whiteSpaceRmved" type="removeWhitespace" stored="true" indexed="true"/>
<copyField source="original" dest="whiteSpaceRmved"/>
基本上,如果我有像这样的字段,
Hello World
我希望拥有该字段,以及一个看起来像
的新字段名称HelloWorld
但是当我尝试它时,它会复制该字段,但不会以任何方式更改它。有什么想法吗?
答案 0 :(得分:0)
您需要将标记生成器<tokenizer class="solr.StandardTokenizerFactory" />
移动到分析器链的末尾。目前,它在删除空格之前将字段值分解为标记。实际上,因为你要删除空格,你可能甚至不需要一个标记化器,因为它看起来好像你想要将值存储为字符串。
答案 1 :(得分:0)
你应该使用Keyword Tokenizer,它不是实际的标记,所以整个输入字符串被保存为单个标记
<fieldType name="removeWhitespace" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="(\s)" replacement="" replace="all"
/>
</analyzer>
</fieldType>