设为首页 收藏本站
查看: 1513|回复: 0

[经验分享] rails中Elasticsearch的客户端Tire配置

[复制链接]

尚未签到

发表于 2017-5-21 09:24:19 | 显示全部楼层 |阅读模式
$ gem install tire   ||  https://github.com/karmi/retire
#加载

#model中加载tire模块 
class Article < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
end
#索引的名字
 index_name "#{Tire::Model::Search.index_prefix}<模型名字>"
 
#建立索引

  class Article < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :id,           :index    => :not_analyzed
indexes :title,        :analyzer => 'snowball', :boost => 100
indexes :content,      :analyzer => 'snowball'
indexes :content_size, :as       => 'content.size'
indexes :author,       :analyzer => 'keyword'
indexes :published_on, :type => 'date', :include_in_all => false
end
end
# analyzer:分词【keyword,snowball…】  type:类型【string, integer, date ...】 boost:权重
 
# 创建json

class Article < ActiveRecord::Base
# 可以添加一些方法
def to_indexed_json
names      = author.split(/\W/)
last_name  = names.pop
first_name = names.join
{
:title   => title,
:content => content,
:author  => {
:first_name => first_name,
:last_name  => last_name
}
}.to_json
end
end
#... 添加方法
def is_admin? do
...
end
def to_indexed_json
to_json(
include: {:user{methods: [:is_admin?]}})
end
 
# 更新索引
 

    class Article < ActiveRecord::Base
include Tire::Model::Search
after_save do
update_index if state == 'published'
end
end
 
# 构建搜索的json数据

……
# 搜索方法,静态方法
DEFAULT_QUERY_FIELDS = ['title','des']
def self.search(params)  
# page:分页页数,per_page:每页的数量, highlight:高亮
# load:不加这个以为着要直接用elasticsearch搜索的json,通过 _source 或fields 取JSON属性,如果加上true 或 {include: user},返回的结果有对象
tire.search(:page => (params[:page] || 1), per_page: 10, highlight: :name, load: true) do
# 表示查询项
query do
# 表示对比值
boolean do
term单一属性
must { term 'is_admin?', true }        
must { string (params[:q] || '*'), default_operator: "AND", fields: DEFAULT_QUERY_FIELDS }
end
end
# terms表述属性是[...], 与后面的交集
filter :terms, 'tags' => ['ruby', 'java']
## range 表示范围
filter :range, 'price' => {gte: 1}
filter :range, 'price' => {lte: 2}
# 表示被包含
facet 'global-tags', :global => true do
terms :tags
end
# 排序(添加时间索引 type:date)
sort { by 'created_at', "desc" }
end
end
……
 

简单类型:
String:字符型最常用的
Integer:整型
Long:长整型
Float:浮点型
Double:双字节型
Boolean:布尔型
复杂类型:
Array:数组型
Object:对象类型
Nested: 嵌入类型用的还是比较多的
multi_field允许为一个字段设置多个数据类型。应用multi_field的一个最典型的场景是:"properties": { "created": { "type":"multi_field", "fields": { "created": { "type": "string" }, "date": { "type": "date"}}}}

     filter :nested, {path: 'cars'}.merge({query: (
Tire::Search::Query.new do
filtered do
query { all }
filter :range, 'cars.price' => {gte: params[:price_from].to_i} if params[:price_from].present?
filter :range, 'cars.price' => {lte: params[:price_to].to_i} if params[:price_to].present?
end
end).to_hash}) if params[:price_from].blank? && params[:price_to]
  tire 删除索引(这个索引的数据已经被删除了)

def self.date_authen!(klass, result)
begin
result.results
rescue ActiveRecord::RecordNotFound => ex
index_ids = ex.message.split('(')[1].to_s.split(')')[0].to_s.split(',').map(&:to_i)
kass_ids = klass.where(id: index_ids).select(:id).map(&:id)
delete_ids = index_ids - kass_ids
delete_ids.each do |id|
klass.tire.index.remove(klass.name.tableize.singularize, id)
end
klass.tire.index.refresh
end
result
end
 
 
 [size=1em]Nested http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/
 
 查看index:sudo ./bin/plugin -install mobz/elasticsearch-head

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379493-1-1.html 上篇帖子: Elasticsearch模块功能之-索引模板(Index templates) 下篇帖子: 7.ElasticSearch预警服务-Watcher详解-Action设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表