Solr - 使用自定义标记生成器的WordDelimiterFilterfactory仅在边界上进行拆分

时间:2013-04-24 10:56:12

标签: solr

我为&-的自定义标记器配置了WordDelimiterFilterFactory,它正常工作。

对于少数令牌工具(例如. _ :),我们只需要在边界上进行拆分。而且如果在两个词之间不要分裂。

e.g。

test.com (should tokenized to test.com)
newyear. coming (should tokenized to newyear and coming)
new_car (should tokenized to new_car)
..
..

我检查过哪些类型可以在Solr.WordDelimiterFilterFactory LOWERUPPERALPHADIGITALPHANUM,{{1}中使用}。没有可用于每种类型的描述。根据名称建议,我认为类型SUBWORD_DELIM可能满足我的需要,但它似乎不起作用。

以下是文字字段的定义

SUBWORD_DELIM

下面是wdfftypes_general.txt内容

<fieldType name="text_general_preserved" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
         <filter class="solr.WordDelimiterFilterFactory"
                splitOnCaseChange ="0"
                splitOnNumerics ="0"
                stemEnglishPossessive ="0"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                preserveOriginal="0"
                protected="protwords_general.txt"
                types="wdfftypes_general.txt"
                />

        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
        <filter class="solr.WordDelimiterFilterFactory"
                splitOnCaseChange ="0"
                splitOnNumerics ="0"
                stemEnglishPossessive ="0"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                preserveOriginal="0"
                protected="protwords_general.txt"
                types="wdfftypes_general.txt"
                />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

有人可以建议我如何设置& => ALPHA - => ALPHA _ => SUBWORD_DELIM : => SUBWORD_DELIM . => SUBWORD_DELIM 的配置以满足我的要求。

感谢。

1 个答案:

答案 0 :(得分:0)

根据WordDelimiterFilterFactory的文档,wdfftypes.txt文件中的SUBOWRD_DELIM设置仅影响基于splitOnCaseChange和splitOnNumerics设置的行为。因此,我会在wdfftypes.txt文件中添加: _ .作为ALPHA条目,并在fieldType中的WordDelimiterFilterFactory之后添加一个新的PatternReplaceCharFilterFactory以删除那些前导或尾随来自任何代币的角色。