3

我已经为我的 Rails 3.0 应用程序安装了 Solr 和 Sunspot gem。

我的目标是进行模糊搜索。例如,我希望搜索词“Chatuea Marguxa”被发现为“Château Margaux”。

实际上,只找到了完全相同的单词,所以模糊根本不起作用。

我的模型:

  searchable do
    text :winery
  end 

我的控制器:

   search = Wine.search do
     fulltext 'Chatuea Marguxa'
   end 

我尝试使用 ngram 的 solr 模式:

<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 响应。(当然在重新索引之后)。

我做错了什么?

4

2 回答 2

1

尝试'~'在查询中的所有单词后面添加字符。像这样:Chatuea~ Marguxa~。这是在 lucene 中实现的模糊运算符:http: //lucene.apache.org/core/3_6_0/queryparsersyntax.html#Fuzzy%20Searches

于 2015-06-12T13:11:13.653 回答
0

一些搜索发现模糊的宝石:

轶事基准:在我的开发机器(2011 MacBook Pro)上,针对我们整个 Geonames 派生的位置表(320 万条记录,约 1GB 数据)

搜索前 10 条匹配记录需要 6 毫秒 ±1 为所有记录准备索引大约需要 10 分钟 更改记录时的数据库查询开销为 3 毫秒 ±2 内存开销(trigrams 表索引的占用空间)约为 300MB

于 2013-05-01T09:04:53.583 回答