我想了解标准模式下的太阳黑子是否在全文搜索中搜索单词或字符序列以及如何搜索序列。
例如,我有以下设置:
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
带来的。
是否有任何配置设置太阳黑子来匹配字符序列而不是单词?
或者,我做错了什么?
答案 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的模式。