安装
1、 在 Gemfile 中添加:
gem "sunspot_rails", "~> 2.5"
gem "sunspot_solr", "~> 2.5" # 开发环境使用,本地的solr环境
2、 然后毫无疑问是 Bundle:
bundle install
3、 接着生成配置文件 config/sunspot.yml:
rails generate sunspot_rails:install
4、 如果安装 sunspot_solr 了,那么就运行它(可选):
bundle exec rake sunspot:solr:start
关闭,也只要把 start 换成 stop 即可:
bundle exec rake sunspot:solr:start
配置
config/sunspot.yml
production:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/blog_core
user: admin # 如果solr开启了认证的话,可以使用 user 和 pass 选项
pass: xxx
development:
solr:
hostname: localhost
port: 8983
log_level: INFO
path: /solr/blog_core
test:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/blog_core
对象设置
对象设置也和安装一样简单,只要在 model 里添加一个 searchable 的 block 指明需要索引的字段和查询范围即可,例如:
class Article < ActiveRecord::Base
searchable do
text :title
time :created_at
end
end
那么被 text
声明的字段就会作为全文索引,至于 time
或其它 Sunspot
可以使用的类型(boolean, integer, string
等)就会作为查询范围时使用。
对象查找
继续用上面的 model 作为例子,当我们需要查找校名,那么可以设定这样一个方法:
def self.search_article(word)
@articles = Article.search do
fulltext word
end.results
return @articles
end
Reindex
当我们在 Article
中添加或删除记录时,Sunpost
自动就会帮我们重新 reindex
,但如果我们需要添加新的字段或不得不需要手动 reindex
时,可以使用如下指令:
rake sunspot:reindex
中文搜索
如果想让 Solr 支持中文也十分简单,只要将 managed-schema
中的 fieldType
替换成你想使用的分词系统即可,我这里使用的是 ik-analyzer-solr
添加分词器
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
配置 field
<field name="article_title" type="text_ik" indexed="true" stored="false" required="true" multiValued="false" />
<field name="article_content" type="text_ik" indexed="true" stored="false" required="true" multiValued="false" />
评论区