モデル フィールドの一部を暗号化するために attr_encrypted を使用しています。全文検索には、Tire と Elasticsearch を使用しています。私は単純な検索フォームを使用しています。ここに私のモデルの一部があります:
class Student < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :name, :surname
attr_encrypted :name, :key => 'f98gd9regre9gr9gre9gerh'
attr_encrypted :surname, :key => 'f98gd9regre9gr9gre9gerh'
def self.search(params)
tire.search(load: true) do
query { string Student.encrypt_name(params[:search]) } if params[:search].present?
end
end
end
たとえば、データベースに「John」という名前がある場合、「John」を検索すると、データベースにクエリを実行する前にクエリが暗号化され (Student.encrypt_name(params[:search]))、結果が返されます。 . Elasticsearch ではワイルドカード検索が可能です。たとえば、"Joh*" を検索すると、一致した結果が返されますが、暗号化されたキーワード "Joh" は暗号化された "John" とは異なり、db は結果を返しません。これに関する解決策をいただければ幸いです。
よろしく、 ラドスラフ