12/08/2018, 15:09

Tìm kiếm với gem pg-search

Hiện nay có nhiều Startup rất thành công nhờ khai thác nguồn dữ liệu như hệ thống tìm kiếm địa điểm du lịch Bayo, Vntrip, hệ thống tìm kiếm chăm sóc sức khỏe Vicare, hệ thống đặt phòng AirBnb Đặc trưng cho các sản phẩm đó thường có một ô search rất lớn và tập trung vào chức năng chính đó. Các sản ...

Hiện nay có nhiều Startup rất thành công nhờ khai thác nguồn dữ liệu như hệ thống tìm kiếm địa điểm du lịch Bayo, Vntrip, hệ thống tìm kiếm chăm sóc sức khỏe Vicare, hệ thống đặt phòng AirBnb Đặc trưng cho các sản phẩm đó thường có một ô search rất lớn và tập trung vào chức năng chính đó. Các sản phẩm đó thường là Single Page Application có 3 phần chính: Server cung cấp Api, Client và mô hình kết nối. Hôm trước mình có dự định làm 1 cái ứng dụng web đơn giản để tìm kiếm chùa chiền ở Việt Nam với Ruby on Rails, sử dụng Database là Postgresql và sử dụng React để viết Client. Để viết Api mình có sử dụng 1 gem full text search và thấy khá hay muốn giới thiệu cho mọi người. Đó là gem pg_search.

Hôm nay mình sẽ giới thiệu về cách sử dụng Gem để tìm kiếm một địa điểm Trước tiên cài đặt Gem

gem install pg_search

Hoặc thêm vào gem file

gem 'pg_search'

Sau đó thêm include PgSearch vào model muốn có thể search, chỉ ra các thuộc tính search

class Place < ActiveRecord::Base
  belongs_to :user
  include PgSearch
  pg_search_scope :search, against: [:name, :position, :address]
end

Ở đây, mình tạo một model Địa danh đơn giản với các thuộc tính: name, description, position, address và thử nghiệm gem pg_search để tìm kiếm Sau đó thêm vào config/routes.rb

resources :search, only: [:index]

Bây giờ thêm search field vào giao diện sử dụng input field

<input type=”text” name=”query” id=”query” placeholder=”Nhập tên, địa điểm…”>

Và thêm button submit search

<input type=”submit” name=”commit” value=“Search”>

Bước cuối cùng là thêm vào Controller xử lý request

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

Vậy là mình vừa thử sử dụng gem pg_search để cài đặt demo một phần tìm kiếm điểm đến đơn giản. Chúc các bạn lập trình vui vẻ!

0