Estoy usando attr_encrypted para cifrar algunos de los campos de mi modelo, y uso Tire con Elasticsearch para la búsqueda de texto completo. Utilizo solo un formulario de búsqueda simple. aquí es parte de mi modelo:¿Cómo puedo hacer búsqueda comodín en elementos cifrados en la base de datos
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
Así, por ejemplo, si tengo el nombre "John" en la base de datos, cuando la búsqueda de "John" la consulta es de abono (Student.encrypt_name (params [ : búsqueda])) antes de consultar la base de datos, y se devuelve el resultado. Elasticsearch permite la búsqueda comodín, por ejemplo, si busco "Joh *", debe devolver el resultado coincidente, pero la palabra clave encriptada "Joh" es diferente de "John" encriptada, y db no arroja ningún resultado. Cualquier solución sobre esto sería apreciada.
Saludos, Radoslav
¿Encontró una solución para esto? Tengo el mismo problema –