我使用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
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果我在数据库中有名称"John",当我搜索"John"时,查询被加密(Student.encrypt_name(params [:search])),然后查询数据库,结果返回.Elasticsearch允许通配符搜索,例如,如果我搜索"Joh*",则应返回匹配结果,但加密关键字"Joh"与加密"John"不同,db不返回任何结果.任何解决方案都将受到赞赏.
此致,拉多斯拉夫
ruby-on-rails elasticsearch ruby-on-rails-3.2 attr-encrypted