ElasticSearch rails
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 ...
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.
- Đối với Ubuntu Vào trang elasticsearch.org/download và download DEB file . Sau đó mở file bằng câu lệnh
$ 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 .
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 !