大头龙仔Blog

A strong man can save himself. A great man can save another.

Rails无痛ElasticSearch

| Comments

最近因为需要,在项目里加入ElasticSearch,总结一下这个无痛教程。

1、 安装elasticsearch-rtf

这是个好东西,已经集成常用的插件(不要忘记要装个JDK,不然ElasticSearch就启动不了),安装完成后就启动这个东东。 如果你想加到系统启动,就要看看bin/service/elasticsearch的命令说明。

2、在Rails项目中加入elasticsearch-rails

Gemfile加入:

1
2
gem 'elasticsearch-model'
gem 'elasticsearch-rails'

bundle

3、建立查找索引

这里我有个Post的Model(有几千条记录),有个title的字段,现在我需要ElasticSearch为title字段建立索引,以便查找:

1
2
3
4
5
6
7
8
class Post < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  mapping dynamic: false do
    indexes :title
  end
end

Import数据,我用的是官方的Rake Tasks,以Post为例就是这样子:

1
rake environment elasticsearch:import:model CLASS='Post' FORCE=y

如果在Production环境:

1
RAILS_ENV=production rake environment elasticsearch:import:model CLASS='Post' FORCE=y

而新加入的数据就会有Callback调用加入索引,这就不用我们操心了。

4、中文分词

elasticsearch-rtf里的elasticsearch.yml文件默认是用keyword的,按照我的理解是,需要全部匹配。 例如有个title叫abc,如果你用a来搜是搜不出来的。所以这里我会改为mmseg,这样就会自动帮我们分词了。(记得重启ElasticSearch)

5、测试

Post.search('blabla')来试试看: )

6、最后

这只是一个无痛的最最基本的能让ElasticSearch加入到我们Rails项目中的指导,ElasticSearch还有好多好牛的东西(我暂时也没有这个需要),请移动到guide。例如你可能需要为搜索后的结果进行一定的排序之类。

EOF

Comments