我可以使用什么Solr tokenizer和过滤器进行强大的常规站点搜索?

Car*_*son 3 lucene search solr full-text-search

我想确保I.B.M.通过搜索找到搜索ibm.我也想确保Dismemberment Plan通过搜索找到dismember.

使用Solr,我可以在分析和查询时使用什么标记器和过滤器来允许两种结果?

Jay*_*dra 9

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