0

我在 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

标题和类别是我正在搜索的两个文本字段。Caption 是自由格式的文本,而 Category 是一个文本字符串,例如“Earth Science > Volcanoes”

这是我在 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
4

2 回答 2

0

如果您在使用词干提取的特定情况下没有得到想要的结果,您可以添加一个 solr.SynonymFilterFactory 过滤器,如下所述

<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
于 2013-08-08T07:12:10.707 回答
0

我相信这是由于引入SnowballPorterFilterFactory

将其包含在您的分析器列表中会导致 Solr 将词干应用于您的术语。特别是,在这种情况下,Solr 做了Porter Stemming

如果您不需要词干,则可以删除该分析器。

于 2013-08-07T13:46:57.913 回答