3

我想了解 Sunspot 在标准模式下是否在全文搜索中搜索单词或字符序列,以及如何使其搜索序列。

例如,我有以下设置:

class User < ActiveRecord::Base
   searchable do
      text :email
   end
end

与一个User电子邮件“panayotis@matsinopoulos.gr”

以下查询:

search = User.search do 
   fulltext 'matsinopoulos'
end

不会带来任何结果,而:

search = User.search do
   fulltext 'panayotis@matsinopoulos.gr'
end

带来。

太阳黑子是否有任何配置设置来匹配字符序列而不是单词?

或者,我做错了什么?

4

1 回答 1

8

一、需要配置文件:

solr/conf/schema.xml

标准输入:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

必须转向:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>`
</fieldType>

可以在此处找到有关 Solr 配置的非常好的参考:

http://techbot.me/2011/01/full-text-search-in-in-rails-with-sunspot-and-solr/

但是,请注意,当涉及到与此参考匹配的部分单词时,它只会对单词EdgeNGramFilterFactory的开头进行索引。为了使 Solr 匹配单词的任何部分,NGramFilterFactory需要使用 。

另请注意,我们已设置minGramSizeto3maxGramSizeto 30。因此,长度小于 3 或大于 30 的模式将不会在查询中返回。

于 2012-08-27T11:01:02.140 回答