Как найти совпадение строки без порядка слов в postgresql?
Есть иерархическая таблица адресов (простой adjacency list). Нужно просто сделать поиск адреса по ненормированному пользовательскому запросу. К примеру есть такие записи в таблице
Здесь начала идет поле "имя", а в конце в скобках тип единицы адреса. В кавычках денормализированная строка всех имен родительского дерева, это может быть массив имен - не важно, БД на этапе проектирования. Нужно, чтобы порядок слов не влиял на выборку, т.е. запрос "пермь 25 алтайская" или любой другой пользовательский ввод адреса находил именно последнюю запись в вышепреведенной иерархии.
Полнотекстовый поиск тут крайне избыточен - словарей как таковых нет, вся таблица - это и есть словарь, и для каждой записи словарем будет денормализованный адрес.
Наведите на путь истинный пожалуйста, я до такого даже нагуглить не смог, по большей части народ интересуется полнотекстовым поиском, но тут не то.
Dmitry MiksIr Т.е. получается мне надо будет сделать денормализацию структурированных данных, чтобы создать из денормализованной строки данные подобной структуры? Может есть способ без этого оверхеда?
Класс. Как мне сделать полнотекстовый поиск, но без реализации полнотекстового поиска. Я бы для начала почитал про варианты организации полнотекстового поиска, потом бы взвесил из применимость (в т.ч. и "оверхед") к Postgres.
Neka_D: ничо не понял. У вас уже есть денормализация. Осталось только построить полнотекстовый индекс. В принцие, если эта строка нужна только для поиска - можно сразу в ней делать вектор. Если нужна еще для чего-то, то или отдельное поле с вектором или просто индекс по выражению