0

我已经为自定义标记器配置了 WordDelimiterFilterFactory&并且-工作正常。

对于少数分词器(如. _ :),我们只需要在边界上进行拆分。如果在单词之间,不要分裂。

例如

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

我检查了可以在Solr.WordDelimiterFilterFactoryare LOWER, UPPER, ALPHA, DIGIT, ALPHANUM,中使用的类型SUBWORD_DELIM。没有可用于每种类型的描述。顾名思义,我认为 SUBWORD_DELIM 类型可以满足我的需求,但它似乎不起作用。

以下是文本字段的定义

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

以下是 wdfftypes_general.txt 内容

& => ALPHA
- => ALPHA
_ => SUBWORD_DELIM
: => SUBWORD_DELIM
. => SUBWORD_DELIM

任何人都可以建议我如何设置配置Solr.WordDelimiterFilterFactory以满足我的要求。

谢谢。

4

1 回答 1

0

根据 WordDelimiterFilterFactory 的文档,wdfftypes.txt文件中的 SUBOWRD_DELIM 设置仅影响基于 splitOnCaseChange 和 splitOnNumerics 设置的行为。因此,我将: _ .在 wdfftypes.txt 文件中添加为 ALPHA 条目,并在您的 fieldType 中的 WordDelimiterFilterFactory 之后添加一个新PatternReplaceCharFilterFactory 以从任何标记中删除那些前导或尾随字符。

于 2013-04-24T13:24:31.103 回答