Elasticsearch kết hợp với searchkick

1. install java

Tại sao phải cài đặt java? bời vì elasticsearch được phát triển bằng java vì vậy để chạy được Elasticsearch chúng ta cần cài đặt java. Các bạn sử dụng các lệnh sau để cài đặt java.

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

kiểm tra java cài đặt thành công

java -version

2. cài đặt elasticsearch

Elasticsearch là một công cụ tìm kiếm dựa trên nền tảng Apache 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. Các bạn cài elasticserach sử dụng các lệnh sau

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update
sudo apt-get install -y elasticsearch

Khởi động elasticserach service

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

cuối cùng kiểm tra elasticsearch đã hoạt động chưa, mở trình duyệt gõ

localhost:9200

nếu các bạn nhìn thấy giống như ảnh là các bạn đã cài đặt xong elasticsearch.

3. cài đặt gem searchkick

thêm gem 'searchkick' vào gemfile và chạy bundle install

4. thêm searchkick và đánh index cho model

class Product < ApplicationRecord
  searchkick
end

mở rails cProduct.reindex nó sẽ tự động đánh index tất cả các trường của bảng products. Bạn có thể mở http://localhost:9200/_all/_mapping bạn sẽ nhìn thấy tất cả các trường được đánh index

  • nếu bạn muốn chỉ đánh index một số trường thì sao? các bạn có thể viết các trường được đánh index vào hàm sarch_data
class Product < ApplicationRecord
  searchkick

  def search_data
    {
      name: name,
      short_description: short_description
    }
  end
end

ví dụ ở đây mình chỉ muốn đánh index trường nameshort_description sau đó chạy Product.reindex trên rails c, mở http://localhost:9200/_all/_mapping bạn sẽ chỉ nhìn thấy nameshort_description được đánh index

5. Lấy dữ liệu từ elasticsearch bằng searchkick

bạn mở rails cdata = Product.search "*" sau đó gõ data.resutls nó sẽ lấy dữ liệu ra cho bạn ở đây mình đang sử dụng câu lệnh "*" để lấy ra tất cả bản ghi. nếu các bạn muốn tùy chỉnh câu lệnh truy vấn thì các bạn có thể đọc về DSL query trong elasticsearch hoặc đọc trong gem searchkick cả hai cách để có thể tùy chỉnh được câu lệnh truy vấn lấy kết quả trả về.

link tham khảo

https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-ubuntu-16-04/ chú ý: đây là mình đang làm việc với hệ điều hành ubuntu


All Rights Reserved