Elasticsearch kết hợp với searchkick
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 ...
- 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
- 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.
- cài đặt gem searchkick thêm gem 'searchkick' vào gemfile và chạy bundle install
- thêm searchkick và đánh index cho model
class Product < ApplicationRecord searchkick end
mở rails c gõ Product.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 name và short_description sau đó chạy Product.reindex trên rails c, mở http://localhost:9200/_all/_mapping bạn sẽ chỉ nhìn thấy name và short_description được đánh index
- Lấy dữ liệu từ elasticsearch bằng searchkick bạn mở rails c gõ data = 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 được câu lệnh truy vấn.