0

ElasticSearch rails

Giới thiệu

Elasticsearch là một công cụ tìm kiếm dựa trên phần mềm Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON. Elasticsearch được phát triển bằng Java và được phát hành dạng nguồn mở theo giấy phép Apache. Elasticsearch là một công cụ tìm kiếm phổ biến nhất, theo sau là Apache Solr, cũng dựa trên Lucene.

Tích hợp ElasticSearch .

$ sudo dpkg -i elasticsearch-[version].deb
  • Sau khi cài đặt thành công bạn truy cập đường dẫn : http://localhost:9200 sẽ thấy các thông số như sau .
{
"status" : 200,
"name" : "Anvil",
"version" : {
 "number" : "1.2.1",
 "build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364",
 "build_timestamp" : "2014-06-03T15:02:52Z",
 "build_snapshot" : false,
 "lucene_version" : "4.8"
},
"tagline" : "You Know, for Search"
}

Tạo ứng dụng rails sử dụng elasticsearch .

** - Gemfile**

gem 'elasticsearch-model'
gem 'elasticsearch-rails'

Sau đó chạy lệnh bundle install .

** - Khởi tạo Search Controller**

$ rails g controller search

trong constroller search viết một hàm search . Để tìm kiếm và sử dụng tính năng của elasticsearch .

def search
if params[:q].nil?
 @articles = []
else
 @articles = Article.search params[:q]
end
end

** - Tạo model Article**

require 'elasticsearch/model'
class Article < ActiveRecord::Base
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
end

Để sử dụng tính năng tìm kiếm của elasticsearch bạn cần require 'elasticsearch/model' vào trong model .

** -Search View** Khởi tại file app/views/search/search.html.erb:

<h1>Articles Search</h1>

<%= form_for search_path, method: :get do |f| %>
<p>
 <%= f.label "Search for" %>
 <%= text_field_tag :q, params[:q] %>
 <%= submit_tag "Go", name: nil %>
</p>
<% end %>

<ul>
<% @articles.each do |article| %>
 <li>
   <h3>
     <%= link_to article.title, controller: "articles", action: "show", id: article._id%>
   </h3>
 </li>
<% end %>
</ul>

** - Routes Search . **

get 'search', to: 'search#search'

Và giờ bạn có thể truy cập http://localhost:3000/search và tìm kiếm bất cứ từ nào articles mà bạn đã tạo .
** - Custom Query** Để có thể giúp việc tìm kiếm trở nên linh hoạt hơn . ElasticSearch đã hỗ trợ trong việc Custom Query Tại app/models/article.rb:

def self.search(query)
__elasticsearch__.search(
  {
    query: {
      multi_match: {
        query: query,
        fields: ['title', 'text']
      }
    }
  }
)
end

Ưu tiên các kết quả tìm kiếm của trường title so với các trường khác .

Lời kết

Việc sử dụng ElasticSearch đạt hiệu quả cao khi bạn thực hiện tìm kiếm với DB có nhiều bản ghi và các bản ghi có ít sự thay đổi . Sử dụng elsaticsearch có thể nâng cao hiểu quả tìm kiếm tuy nhiên hãy xác định nó phù hợp với ứng dụng của bạn trước khi cài đặt và sử dụng Thank for reading !


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí