小编use*_*897的帖子

如何对数据库中的加密元素进行通配符搜索

我使用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

5
推荐指数
1
解决办法
1030
查看次数