扩展 Solr 搜索:"volcano"匹配"volcanic"



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

我需要如何修改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

标题和类别是我正在搜索的两个文本字段。标题是自由格式的文本,而类别是类似于"地球科学>火山"的文本字符串

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

我认为这是由SnowballPorterFilterFactory 的引入引起的

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

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

如果对于带有词干的特定情况没有得到所需的结果,可以添加solr。同义词FilterFactory过滤器如这里所述:

<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

相关内容

  • 没有找到相关文章

最新更新