我想确保搜索,比如说,I.B.M.
可以通过搜索找到ibm
。我还想确保Dismemberment Plan
可以通过搜索找到dismember
.
使用 Solr,我可以在分析和查询时使用什么标记器和过滤器来允许两种结果?
对于 IBM => ibm
你需要一个solr。字分隔符过滤器工厂 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory,这将删除特殊字符并连接单词和数字
catenateWords="1" 将连接单词并将 I.B.M 转换为 IBM。
肢解=>肢解
需要包含一个词干过滤器(例如 solr.PorterStemFilterFactory、solr.EnglishMinimalStemFilterFactory),它将索引单词的根并为具有相同根的单词提供匹配。
此外,您可以使用 solr.LowerCaseFilterFactory 进行不区分大小写的匹配(IBM 和 ibm),使用 solr.ASCIIFoldingFilterFactory 处理外来字符。
您可以随时使用同义词过滤器工厂 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory映射您认为是同义词的单词。
您可以在查询和索引时应用此功能,以便它们在查询和索引时进行匹配和转换,并且结果是一致的。
例如字段类型定义 -
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<!-- Index and Query time -->
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!-- Stemmer -->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)