Car*_*son 3 lucene search solr full-text-search
我想确保I.B.M.通过搜索找到搜索ibm.我也想确保Dismemberment Plan通过搜索找到dismember.
使用Solr,我可以在分析和查询时使用什么标记器和过滤器来允许两种结果?
对于IBM => ibm,
您需要一个solr.WordDelimiterFilterFactory,它会删除特殊字符并附加单词和数字
catenateWords ="1"将链接单词并将IBM转换为IBM.
Dismemberment =>
dismember需要包含一个词干分析器(例如solr.PorterStemFilterFactory,solr.EnglishMinimalStemFilterFactory),它将索引词的根并为具有相同词根的词提供匹配.
此外,您可以将solr.LowerCaseFilterFactory用于不区分大小写的匹配项(IBM和ibm),solr.ASCIIFoldingFilterFactory用于处理外来字符.
您始终可以使用SynonymFilterFactory来映射您认为是同义词的单词.
您可以在查询和索引时应用它,以便它们在两者期间匹配和转换,结果是一致的.
例如字段类型def -
<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>
Run Code Online (Sandbox Code Playgroud)
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters