为 rails 本地项目搭建 elasticsearch 服务
2017-12-15 21:24
405 查看
首先安装 elasticsearch 服务
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 第九影院对应的版本是否合适
gemfile中 引用 searchkick
这里我们是使用了 1.3.3 版本的gem 'searchkick', '1.3.3'
model 中引用searchkick
现在我们已经有搜索服务了,现在要配置需要搜索的 model在 model 中引用 searchkick
# 全文检索 searchkick searchkick
给 products 表重建索引
Product.reindex
进行搜索
products = Product.search "apples"
这时就会得到结果集。
如果是简单的应用到这里就可以满足要求 ,当然我们有时候需要一些个性化的配置。
给部分字段建立索引
reindex 方法会默认给所有的字段建立索引,但是由于字段过长,或者性能原因我们只需要部分字段有索引 可以这样:def search_data { name: name } end
重写 search_data 方法加入name 这样就只给 name 字段打索引了
关联表建索引
class Catalog < ActiveRecord::Base has_many :products end
class Product www.dijiuyy.com < 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~!!
相关文章推荐
- 如何搭建本地SVN服务
- IOS博客项目搭建-08-项目使用本地Git
- 转载:迷你云 – 搭建自己的本地多人团队Dropbox 服务
- 【gitlab】gitlab相关基础知识、利用hyper-v安装ubuntu及在ubuntu环境下搭建本地gitlab服务
- 以太坊go-ethereum项目源码本地环境搭建
- rails 通过局域网ip连接访问本地Rails项目
- 微服务springBoot项目搭建
- 整合 ElasticSearch 到现有 Rails 项目
- centos 如何用 rsyslog 搭建本地日志服务
- 搭建rails项目
- 本地yum服务搭建
- Mac搭建本地局域网SVN服务(Cornerstone)
- [New learn] 网络基础-apache本地服务搭建(支持php)
- Maven-maven多模块项目搭建+Dubbo分布式服务框架 budong
- dubbo zk 分布式服务项目搭建与配置
- ElasticSearch集群搭建及配置监视服务
- Azure 项目构建 - 用 Azure 认知服务在微信公众号上搭建智能会务系统
- 用vue-cli构建了项目之后在webstorm开发,用npm run dev跑本地服务,经常修改之后在浏览器刷新没反应,偶尔才会有刷新,需要重新跑一遍npm run dev才会更新,这是怎么回事呢?