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