我为我的Rails 3.0应用程序安装了Solr和Sunspot gem。
我的目标是进行模糊搜索。 例如,我希望将搜索词“Chatuea Marguxa”命名为“ChâteauMargaux”。
实际上,只找到相同的确切单词,因此模糊不起作用。
我的模特:
searchable do
text :winery
end
我的控制器:
search = Wine.search do
fulltext 'Chatuea Marguxa'
end
我试过的solr模式,有ngrams:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
我也尝试过双变音电话:
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
</analyzer>
在这两种情况下,我得到了0回复。 (当然重新索引之后)。
我做错了什么?
答案 0 :(得分:1)
尝试在查询中的所有单词后面添加字符'~'
。像这样:Chatuea~ Marguxa~
。这是在lucene中实现的模糊运算符:http://lucene.apache.org/core/3_6_0/queryparsersyntax.html#Fuzzy%20Searches
答案 1 :(得分:0)
有趣的基准:针对我们整个Geonames派生的表格 在我的开发机器上的位置(3.2M记录,大约1GB的数据) (2011年MacBook Pro)
搜索前10个匹配记录需要6ms±1准备 所有记录的索引大约需要10分钟的数据库查询开销 改变记录是在3ms±2的内存开销(脚印的 trigrams表索引)约为300MB