如何设置太阳黑子来搜索字符序列而不是单词?

时间:2012-08-26 15:44:01

标签: ruby-on-rails sunspot sunspot-rails

我想了解标准模式下的太阳黑子是否在全文搜索中搜索单词或字符序列以及如何搜索序列。

例如,我有以下设置:

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

带来的。

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

或者,我做错了什么?

1 个答案:

答案 0 :(得分:7)

需要配置文件:

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

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