【问题标题】:Fuzzy search with Solr and sunspotSolr 和太阳黑子的模糊搜索
【发布时间】:2013-04-24 10:59:41
【问题描述】:

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

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

其实只找到完全相同的词,所以模糊根本没用。

我的模特:

  searchable do
    text :winery
  end 

我的控制器:

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

我尝试过的 solr 模式,带有 ngram:

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

我做错了什么?

【问题讨论】:

  • 在您的情况下,语音过滤器不够用,您需要进行拼写检查/更正
  • 我可以使用什么工具呢?我不明白。

标签: ruby-on-rails solr sunspot fuzzy-search


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    一些搜索发现fuzzilygem:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多