我正在使用 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 不返回任何结果。对此的任何解决方案将不胜感激。
问候, 拉多斯拉夫