Имеется база данных с географическими объектами, взятая из ФИАС. Там у каждого объекта есть ссылка на родителя, и вложенность этого дерева в разных местах разная (бывает, например, «деревня» внутри «города», а внутри неё улицы и дома).
Нужно научиться искать по этой базе (может быть, после конвертации в другую структуру) по простым человеческим запросам типа «нижний новгород гагарина 1» или «кстово, зелёная 13». Плюс хотелось бы иметь возможность добавлять произвольное количество альтернативных сокращений для каждого объекта (ну там, «60-летия» – «60 лет», «улица такого-то» – «улица имени такого-то»). И желательно чтобы поиск получался стабильно быстрый, в идеале чтобы даже можно было сделать автокомплит с тем же алгоритмом, и он бы не тупил.
Как это всё лучше сделать? Что-то уже несколько недель бьюсь, и все мои попытки тормозят. Как бы вы организовали хранение и поиск по такой базе?
БД – PostgreSQL 9.5.