OSX 系统前端
brew install elasticsearch brew services start elasticsearch
测试服务是否启动
浏览器输入 localhost:9200浏览器
{ "name" : "Lynx", "cluster_name" : "elasticsearch_marin", "cluster_uuid" : "acE95aJmQxuMz0cx47b2WQ", "version" : { "number" : "2.4.6", "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd", "build_timestamp" : "2017-07-18T12:17:44Z", "build_snapshot" : false, "lucene_version" : "5.5.4" }, "tagline" : "You Know, for Search" }
出现相似上述信息 number 表示当前 elasticsearch 的版本号,须要注意的是 elasticsearch 如今分为 v2+ 和 v5+ 两个版本,要根据本身的版原本选择 searchkick 对应的版本是否合适ruby
这里咱们是使用了 1.3.3 版本的bash
gem 'searchkick', '1.3.3'
如今咱们已经有搜索服务了,如今要配置须要搜索的 model
在 model 中引用 searchkickapp
# 全文检索 searchkick searchkick
给 products 表重建索引elasticsearch
Product.reindex
进行搜索性能
products = Product.search "apples"
这时就会获得结果集。
若是是简单的应用到这里就能够知足要求 ,固然咱们有时候须要一些个性化的配置。测试
reindex 方法会默认给全部的字段创建索引,可是因为字段过长,或者性能缘由咱们只须要部分字段有索引 能够这样:ui
def search_data { name: name } end
重写 search_data 方法加入name 这样就只给 name 字段打索引了code
class Catalog < ActiveRecord::Base has_many :products end
class Product < ActiveRecord::Base belongs_to :catalog end
def search_data { name: name }.merge{ catalog_name: catalog.name } end
这里 咱们给 product 表添加一个索引叫作 分类名称 catalog_name
这样搜索分类名称就能够搜索出 同一个分类的 商品列表了
Product.search key
这个方法会默认搜索 全部的字段 并返回 全部包含 key 的结果集。
若是咱们想搜索指定的字段该如何设置呢?
def self.elasticsearch(params = {}, options = {}) key = params[:key].blank? ? "*" : params[:key] # 关键字 params[:page] ||= 1 # 分页 params[:per_page] ||= 20 # 每页条数 where_hash = { status: 'success', # 固定筛选值 } conditions = {where: where_hash} conditions[:page] = params[:page] conditions[:per_page] = params[:per_page] search key, conditions end
这样 就至关于给结果集添加 scope,和分页效果,前端配合 kaminari 就能够实现分页效果了
@articles = Product.elasticsearch(params)
action 中将设定好的参数传入就能够获得结果集了
QWQ~!!