Używam attr_encrypted do szyfrowania niektórych pól modelu, a do wyszukiwania pełnotekstowego używam Tire z Elasticsearch. Używam tylko prostego formularza wyszukiwania. tutaj jest częścią mojego modeluJak mogę wykonać wyszukiwanie wieloznaczne na zaszyfrowanych elementach w bazie danych
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
Tak więc, na przykład, jeśli mam imię „Jan” w bazie danych, kiedy wyszukiwania dla „John” kwerenda jest szyfrowane (Student.encrypt_name (params [ : search])) przed wysłaniem zapytania do bazy danych, a wynik zostanie zwrócony. Elasticsearch pozwala na wyszukiwanie wieloznaczne, na przykład jeśli wyszukuję "Joh *", powinien zwrócić dopasowany wynik, ale zaszyfrowane słowo kluczowe "Joh" różni się od zaszyfrowanego "John", a db nie zwraca żadnego wyniku. Wszelkie rozwiązania w tym zakresie byłyby doceniane.
Pozdrawiam, Radoslav
Czy znalazłeś rozwiązanie problemu? mam ten sam problem –