Solr WordDelimiterFilterFactory和Period Characters

时间:2012-01-30 18:11:02

标签: solr lucene sunspot sunspot-rails

我通过sunspot_rails v1.2 gem使用solr。

在我的schema.xml文件中,我有以下内容:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" catenateWords="1" preserveOriginal="1"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" preserveOriginal="1"/>
  </analyzer>
</fieldType>

如果我索引字符串firstname.lastname@example.com,我可以在搜索example.com时找到它,但如果我搜索firstname.lastname则不会找到。

如果我从查询设置中删除了WordDelimiterFilterFactory,那么我可以通过搜索firstname.lastname来查找电子邮件。但是,当我搜索example.com时,没有任何内容。

如何修改配置文件以便能够通过以下任何一种方式进行搜索?

1 个答案:

答案 0 :(得分:1)

您可以调试当前索引的编制方式。查询分析配置正在影响您的搜索,使用Solr Admin Analysis Page,另一个选项是使用Luke来查看Lucene索引。

然而,您可以探索另一种选择。自从,Email&amp; URL需要以特定的方式处理,Lucene具有StandardTokenizer的变体,专门处理Email&amp;网址Lucene Email/URL Tokenizer对应Solr Email/URL Tokenizer Factory