扩大Solr搜索:“火山”匹配“火山”

时间:2013-08-06 17:31:15

标签: solr sunspot-solr websolr

我在heroku上运行的rails应用程序上安装了websolr。我只是注意到搜索“火山”并没有返回我所期望的所有结果。具体来说,它确实返回了包括“火山”和“层状火山”的结果。

如何修改solr配置以解决此问题?

这是我的schema.xml

的相关部分
<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" />
  </analyzer>
</fieldType>

添加:我认为这不相关,但以防万一:

我的Rails Photo.rb模型设置如下:

  searchable do
    text :caption, :stored => true
    text :category do
      category.breadcrumb
    end

    integer :user_id
    integer :category_id
    string :caption
    string :rights
  end

标题和类别是我正在搜索的两个文本字段。标题是自由格式文本,而类别是文本字符串,如“地球科学&gt;火山”

这是我在websolr中显示的同义词配置(我添加了最后一行):

#some test synonym mappings unlikely to appear in real input text
aaa => aaaa
bbb => bbbb1 bbbb2
ccc => cccc1,cccc2
a\=>a => b\=>b
a\,a => b\,b
fooaaa,baraaa,bazaaa

# Some synonym groups specific to this example
GB,gib,gigabyte,gigabytes
MB,mib,megabyte,megabytes
Television, Televisions, TV, TVs
#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming
#after us won't split it into two words.

# Synonym mappings can be used for spelling correction too
pixima => pixma

volcano => volcanic,stratovolcanoes

2 个答案:

答案 0 :(得分:0)

我认为这是由引入SnowballPorterFilterFactory

引起的

将此信息包含在您的分析器列表中会导致Solr将Stemming应用于您的条款。特别是,在这种情况下,Solr会Porter Stemming

如果您不需要阻塞,可以移除该分析仪。

答案 1 :(得分:0)

如果您没有获得具有词干分析的特定案例的预期结果,您可以添加solr.SynonymFilterFactory过滤器,如descibed here

<fieldtype name="syn" class="solr.TextField">
  <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="false"/>
  </analyzer>
</fieldtype>

然后,您将能够维护同义词文件:

volcano => volcanic, stratovolcanoes