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