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

时间:2011-10-11 19:29:30

标签: search lucene solr full-text-search

我希望通过搜索I.B.M.来确保搜索ibm。我还想确保通过搜索Dismemberment Plan找到dismember

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

1 个答案:

答案 0 :(得分:9)

对于I.B.M. => IBM
你需要一个solr。WordDelimiterFilterFactory,它会删除特殊的字符并附加单词和数字

catenateWords =“1”将连接这些词并将I.B.M转换为IBM。

肢解=>肢解
需要包含一个词干分析器(例如solr.PorterStemFilterFactory,solr.EnglishMinimalStemFilterFactory),它将索引词的根并为具有相同词根的词提供匹配。

此外,您可以将solr.LowerCaseFilterFactory用于不区分大小写的匹配项(IBM和ibm),使用solr.ASCIIFoldingFilterFactory处理外来字符。

您始终可以使用SynonymFilterFactory来映射您认为是同义词的单词。

您可以在查询和索引时应用此选项,以便它们在两者中匹配和转换,并且结果是一致的。

e.g。字段类型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>

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters