Solr过滤器工厂语法不起作用

时间:2011-11-08 15:53:51

标签: solr

所以我试图在我的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

但是当我尝试它时,它会复制该字段,但不会以任何方式更改它。有什么想法吗?

2 个答案:

答案 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>