尝试使用Ruby on Rails中的Elasticsearch进行各种搜索。第一部分

因为我自己陷入其中,所以我会写下来。
描述需要花费很多成本,所以每次都会随便搞一搞。。。好失望(´・ω・`)

这是关于使用Elasticsearch并尝试在Rails5中实现WEB界面的事情。
我之前一直觉得在RoR和ES中管理Model很麻烦啊,
然后我发现了有一个叫做elasticsearch的gem。

这个应该可以用吧。所以我尝试使用时发现有些地方没有整理好,所以写下来说明一下。

服务器环境

我使用的环境如下所示。

操作系统:Centos 6.8
编辑器:vim

Elasticsearch 弹性搜索

轻松安装Elasticsearch。

### rpm追加
$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
### 確認
$ cat /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

### install
$ yum install -y elasticsearch

### service start
$ service elasticsearch start

### 一応chkconfig追加
$ chkconfig --add elasticsearch

### 一応確認
$ curl localhost:9200 | jq .

Gemfile => Gem 文件

需要先假设RoR已经被安装好。

在Gemfile中添加以下四个Gem文件。

$ vim Gemfile
[snip]
### elasticsearch
gem 'elasticsearch',       git: 'git://github.com/elasticsearch/elasticsearch-ruby.git'
gem 'elasticsearch-dsl',   git: 'git://github.com/elasticsearch/elasticsearch-ruby.git'
gem 'elasticsearch-model', git: 'git://github.com/elasticsearch/elasticsearch-rails.git'
gem 'elasticsearch-rails', git: 'git://github.com/elasticsearch/elasticsearch-rails.git'
[snip]

设置文件 (shè

请设置RoR的初始配置文件。
如果没有,请以以下方式补充。

$ config/initializers/elasticsearch.rb
elasticsearch_url = ENV['ELASTICSEARCH_URL'] || ENV['WERCKER_ELASTICSEARCH_URL'] || 'http://localhost:9200'
Elasticsearch::Model.client = Elasticsearch::Client.new(host: elasticsearch_url)
require 'typhoeus/adapters/faraday'
    • localhost部分は適当に変更して利用してください。

 

    require ‘typhoeus/adapters/faraday’が何かのエラーで必要だったが、、、忘れたので割愛、気分が出たら調べます。

在Ruby on Rails中进行设置

我将描述如何在 RoR 的 model、controller 和 view 中使用的方法。

模型设置

以下是关于指定ES索引的描述内容。
此外,并非只能使用concerns目录,也可以使用../目录。

$ cat ./app/models/concerns/xxx.rb
class Xxx < ApplicationRecord

  include Elasticsearch::Model ### こいつが重要

  index_name "es_#{Rails.env}" ### 環境別にしてみる。
  document_type 'test'         ### 書かなくてもOK 今回は一応

end

请参考 Rails Webook 的页面来进行后续的基本配置。

用控制器调用。

假设在上述设定的Xxx模型中,存在如下的方法。

$ cat ./app/models/concerns/xxx.rb
 [snip]

 def self.search(params = {})
  keyword = params[:q]
  [snip]
 end

在这种情况下,您可以在控制器中进行以下调用。

$ cat app/controllers/test_controller.rb

  def index
    @searchs = Xxx.search(params)
  end

在View中显示。

当模型和控制器都准备好之后,我们在视图中进行显示。

$ cat app/views/tests/index.html.haml

### 検索結果数
= "検索結果: 約 #{@searchs.results.total} 件"

### 検索結果のイテレーション
- @searchs.each do | search |
 = search.name
 = search.note

### pager
= render 'pager', paginate:@searchs  ### 大事なことは雷様が解決してくれる。

### aggregations
- searchs.aggregations.price.buckets do | price |
 = price

请告诉我是否能够以类似的方式显示。
因为之前有一些写过但这次最终确认未完成的代码,请如有任何意见,请指出。

下次,我们将描述本次未触及的聚合部分。

广告
将在 10 秒后关闭
bannerAds