带有连字符和停用词的Solr(太阳黑子)查询

时间:2012-03-11 23:50:50

标签: ruby-on-rails solr sunspot sunspot-rails sunspot-solr

我正在使用Solr 1.4.1的Ruby Sunspot gem

关于使用连字符进行搜索,我遇到了一个问题。

当我搜索“foo bar bla”时,会返回预期的结果。

如果搜索字词中包含连字符,例如“foo - bar bla”,则不会返回结果。

我已经在我的停用词列表中添加了连字符,并在过去几天以多种方式调整了我的schema.xml文件,但无济于事。

对于那些接触太阳黑子的人,我的最小单词匹配设置为3,这与在solrconfig.xml文件中设置相同的mm配置相同,例如:3

这是我的schema.xml文件的相关部分的外观。

    <!-- *** This fieldType is used by Sunspot! *** -->
<fieldType name="string" class="solr.StrField" tokenized="true" omitNorms="true" sortMissingLast="true">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  </analyzer>
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/>
  </analyzer>
</fieldType>

<!-- *** This fieldType is used by Sunspot! *** -->
<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  </analyzer>
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/>
  </analyzer>
</fieldType>

任何帮助或建议都将受到高度赞赏。

谢谢,

1 个答案:

答案 0 :(得分:6)

连字符( - )是一个Solr运算符,用于排除与运算符后面的单词匹配的结果。我不认为在停用词列表中添加连字符会影响到这一点。我建议在通过Solr运行查询之前删除连字符。我的猜测是,连字符的结果是排除符合&#34; bar&#34 ;?的文档。也许您可以尝试分析结果,看看实际情况是否如此。