我为&
和-
的自定义标记器配置了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
LOWER
,UPPER
,ALPHA
,DIGIT
,ALPHANUM
,{{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
的配置以满足我的要求。
感谢。
答案 0 :(得分:0)
根据WordDelimiterFilterFactory的文档,wdfftypes.txt文件中的SUBOWRD_DELIM设置仅影响基于splitOnCaseChange和splitOnNumerics设置的行为。因此,我会在wdfftypes.txt文件中添加:
_
.
作为ALPHA条目,并在fieldType中的WordDelimiterFilterFactory之后添加一个新的PatternReplaceCharFilterFactory以删除那些前导或尾随来自任何代币的角色。