`

rails中Elasticsearch的客户端Tire配置

阅读更多

$ 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

分享到:
评论

相关推荐

    Ruby-Searchkick利用Rails和Elasticsearch轻松实现智能搜索

    配置Elasticsearch的连接信息可以在`config/elasticsearch.yml`文件中完成,或者在初始化文件中设置。 ### 2. 数据索引 Searchkick提供了方便的方法来索引和更新数据。例如,当创建或更新一个`Product`时,可以...

    rails3.1安装与mysql配置 windows

    标题 "rails3.1安装与mysql配置 windows" 涉及到的是在Windows操作系统上安装Ruby on Rails 3.1框架并配置MySQL数据库的过程。这是一个关键的开发环境设置步骤,对于使用Rails进行Web开发的程序员来说至关重要。Ruby...

    elasticsearch-rails:用于ActiveModelRecord和Ruby on Rails的Elasticsearch集成

    Elasticsearch 项目提供了Elasticsearch客户端和Ruby API。 安装 从安装每个库: gem install elasticsearch-model gem install elasticsearch-rails 要使用未发布的版本,请将其添加到的Gemfile中: gem 'elastic...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    《Ruby on Rails与MySQL环境配置详解》 在开发基于Web的应用程序时,Ruby on Rails(简称Rails)框架和MySQL数据库的结合是常见的选择。本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及...

    Ruby on Rails中文指南

    Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat Yourself)”原则,深受开发者喜爱。在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 ...

    RailsSpace

    这部分内容对于新手来说至关重要,它涵盖了Ruby语言的基本安装、Rails框架的安装以及必要的数据库配置。此外,还会介绍如何设置Rails项目的结构,包括如何创建一个新的Rails应用。 ##### 2.2 用户模型设计 第三章...

    Ruby on Rails安装及MySQL数据库配置指南

    在安装和配置 Ruby on Rails 和 MySQL 数据库的过程中,可能会遇到一些问题。例如,在创建 POSTS 应用时可能会遇到问题,创建数据后数据库中有数据,但是到 Listing posts 界面无法查看,总是报错。解决方法是下载 ...

    配置rails环境

    在Ruby on Rails开发环境中,配置过程是至关重要的第一步。Rails是一个基于Ruby的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式。在安装完Ruby之后,配置Rails环境通常包括以下几个关键步骤: 1. **...

    rails-elasticsearch-example

    在Ruby on Rails开发中,Elasticsearch是一种广泛使用的全文搜索引擎,它提供了强大的数据分析和搜索功能。本教程将深入探讨如何在Rails应用中集成Elasticsearch,实现数据的高效检索和分析。 首先,让我们理解...

    配置高可用的rails

    在rails高可用的配置中,我们会涉及以下几个关键组件: 1. 负载均衡器:负载均衡器是高可用架构中的第一道防线,它负责将外部的请求分发到多个服务器上,以避免单个服务器因为请求量过大而崩溃。常见的开源负载均衡...

    rails中使用javascript日期控件

    在Rails开发中,JavaScript日期控件常常用于提升用户体验,让用户能方便地选择日期,而无需手动输入。这篇博文“rails中使用javascript日期控件”探讨了如何在Rails应用中集成和使用JavaScript日期选择器,以实现更...

    用于TestTrack的Ruby on Rails客户端-Ruby开发

    TestTrack Rails客户端这是TestTrack系统的Rails客户端库。 它通过一个简单的API提供服务器端的拆分测试和功能切换。 如果您要进行客户端分配,请签出TestTrack Rails客户端。这是TestTrack系统的Rails客户端库。 它...

    在Rails中使用SSL

    这通常涉及将证书文件和私钥上传到服务器,并在Rails应用中配置它们。 7. **Heroku与SSL**:如果你的应用托管在Heroku上,可以通过Heroku的控制台或CLI轻松添加和管理SSL证书。 8. **HSTS...

    stream-rails:Rails客户端-使用GetStream.io构建活动Feed和流

    是的Ruby on Rails客户端。 您可以在注册一个Stream帐户。 请注意,还有一个较低级别的库,适用于所有Ruby应用程序。 活动流和新闻源 您可以建立什么: 活动流,例如在Github上看到的 Twitter风格的新闻源 像...

    judge:Rails的客户端表单验证

    通过将许多ActiveModel::Validation功能移植到JavaScript,Judge可以轻松地对Rails进行客户端表单验证。 最常见的验证通过存储在HTML5数据属性中的JSON字符串进行,并且仅在客户端执行。 无论您在何处,Judge都为...

    Rails 中mongrel的安装

    Rails是Ruby on Rails框架的简称,它是一种基于Ruby语言的开源Web开发框架,以其MVC(Model-View-Controller)架构而闻名,旨在简化Web应用的开发过程。在早期的Rails版本中,Mongrel是一个常用的HTTP服务器,用于...

    Ruby on rails 数据库详细配置

    在Ruby on Rails框架中,数据库配置是至关重要的部分,它允许开发者与各种数据库系统进行交互,如MySQL、Microsoft SQL Server等。以下将详细介绍如何在Windows环境下安装Ruby on Rails以及配置数据库。 首先,我们...

    rails指南 中文版

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

Global site tag (gtag.js) - Google Analytics