$ 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
Nested http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/
查看index:sudo ./bin/plugin -install mobz/elasticsearch-head
相关推荐
配置Elasticsearch的连接信息可以在`config/elasticsearch.yml`文件中完成,或者在初始化文件中设置。 ### 2. 数据索引 Searchkick提供了方便的方法来索引和更新数据。例如,当创建或更新一个`Product`时,可以...
标题 "rails3.1安装与mysql配置 windows" 涉及到的是在Windows操作系统上安装Ruby on Rails 3.1框架并配置MySQL数据库的过程。这是一个关键的开发环境设置步骤,对于使用Rails进行Web开发的程序员来说至关重要。Ruby...
Elasticsearch 项目提供了Elasticsearch客户端和Ruby API。 安装 从安装每个库: gem install elasticsearch-model gem install elasticsearch-rails 要使用未发布的版本,请将其添加到的Gemfile中: gem 'elastic...
《Ruby on Rails与MySQL环境配置详解》 在开发基于Web的应用程序时,Ruby on Rails(简称Rails)框架和MySQL数据库的结合是常见的选择。本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及...
Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat Yourself)”原则,深受开发者喜爱。在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 ...
这部分内容对于新手来说至关重要,它涵盖了Ruby语言的基本安装、Rails框架的安装以及必要的数据库配置。此外,还会介绍如何设置Rails项目的结构,包括如何创建一个新的Rails应用。 ##### 2.2 用户模型设计 第三章...
在安装和配置 Ruby on Rails 和 MySQL 数据库的过程中,可能会遇到一些问题。例如,在创建 POSTS 应用时可能会遇到问题,创建数据后数据库中有数据,但是到 Listing posts 界面无法查看,总是报错。解决方法是下载 ...
在Ruby on Rails开发环境中,配置过程是至关重要的第一步。Rails是一个基于Ruby的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式。在安装完Ruby之后,配置Rails环境通常包括以下几个关键步骤: 1. **...
在Ruby on Rails开发中,Elasticsearch是一种广泛使用的全文搜索引擎,它提供了强大的数据分析和搜索功能。本教程将深入探讨如何在Rails应用中集成Elasticsearch,实现数据的高效检索和分析。 首先,让我们理解...
在rails高可用的配置中,我们会涉及以下几个关键组件: 1. 负载均衡器:负载均衡器是高可用架构中的第一道防线,它负责将外部的请求分发到多个服务器上,以避免单个服务器因为请求量过大而崩溃。常见的开源负载均衡...
在Rails开发中,JavaScript日期控件常常用于提升用户体验,让用户能方便地选择日期,而无需手动输入。这篇博文“rails中使用javascript日期控件”探讨了如何在Rails应用中集成和使用JavaScript日期选择器,以实现更...
TestTrack Rails客户端这是TestTrack系统的Rails客户端库。 它通过一个简单的API提供服务器端的拆分测试和功能切换。 如果您要进行客户端分配,请签出TestTrack Rails客户端。这是TestTrack系统的Rails客户端库。 它...
这通常涉及将证书文件和私钥上传到服务器,并在Rails应用中配置它们。 7. **Heroku与SSL**:如果你的应用托管在Heroku上,可以通过Heroku的控制台或CLI轻松添加和管理SSL证书。 8. **HSTS...
是的Ruby on Rails客户端。 您可以在注册一个Stream帐户。 请注意,还有一个较低级别的库,适用于所有Ruby应用程序。 活动流和新闻源 您可以建立什么: 活动流,例如在Github上看到的 Twitter风格的新闻源 像...
通过将许多ActiveModel::Validation功能移植到JavaScript,Judge可以轻松地对Rails进行客户端表单验证。 最常见的验证通过存储在HTML5数据属性中的JSON字符串进行,并且仅在客户端执行。 无论您在何处,Judge都为...
Rails是Ruby on Rails框架的简称,它是一种基于Ruby语言的开源Web开发框架,以其MVC(Model-View-Controller)架构而闻名,旨在简化Web应用的开发过程。在早期的Rails版本中,Mongrel是一个常用的HTTP服务器,用于...
在Ruby on Rails框架中,数据库配置是至关重要的部分,它允许开发者与各种数据库系统进行交互,如MySQL、Microsoft SQL Server等。以下将详细介绍如何在Windows环境下安装Ruby on Rails以及配置数据库。 首先,我们...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...
标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...