如何在rails中使用elasticsearch

Nam*_*ion 2 ruby ruby-on-rails elasticsearch tire

我是弹性搜索的新手.我在我的系统中安装了弹性搜索.在localhost:9200它正在显示

{
  "ok" : true,
  "status" : 200,
  "name" : "Unseen",
  "version" : {
    "number" : "0.90.10",
    "build_hash" : "0a5781f44876e8d1c30b6360628d59cb2a7a2bbb",
    "build_timestamp" : "2014-01-10T10:18:37Z",
    "build_snapshot" : false,
    "lucene_version" : "4.6"
  },
  "tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)

我在我的宝石文件中包含了这两个宝石.

gem 'tire'
gem 'elasticsearch'
Run Code Online (Sandbox Code Playgroud)

我有一个电影模型和一个名为search_controller的控制器.

movie.rb

class Movie < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
    indexes :title
end
def self.search(params)
        binding.pry
        tire.search(load: true, page: 1, per_page: 10) do
        query { string params[:query]} if params[:query].present?
     end
Run Code Online (Sandbox Code Playgroud)

迁移电影模型

class CreateMovies < ActiveRecord::Migration
  def self.up
    create_table :movies do |t|
        t.string :title
      t.timestamps
    end
    def self.down
        drop_table movies
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

search_controller

class SearchController < ApplicationController
  def index
    if(params[:query]).present?
    @results=Movie.search(params)
    else
    @results=[]
    end
  end
end

view/search/index
<h1>Search#index</h1>
<p>Find me in app/views/search/index.html.erb</p>

<%= form_tag search_index_path, method: :get do %>
  <p>
    <%= text_field_tag :query, params[:query] %>
    <%= submit_tag "Search", name: nil %>
  </p>
<% end %>
<% if @results %>
<% @results.each do |fetchresults| %>
<%= fetchresults.title %> 
<%= fetchresults.year %><br/>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

routes.rb资源:搜索root'search #index'

我知道我应该将我的记录编入索引以在弹性搜索中使用它,但不知道如何以及在何处保存这些文件以及如何使用它们.当我试图搜索它显示错误

404 : {"error":"IndexMissingException[[movies] missing]","status":404}
Run Code Online (Sandbox Code Playgroud)

wae*_*218 6

当我将elasticsearch添加到我的rails应用程序时,我使用了searchkick:

https://github.com/ankane/searchkick

它真的是用户友好和快速设置.您可以使用rake searchkick:reindex:all命令索引所有数据.