Индекс для автокомплита
От | Dmitry E. Oboukhov |
---|---|
Тема | Индекс для автокомплита |
Дата | |
Msg-id | 20150110000501.GA6552@vdsl.uvw.ru обсуждение исходный текст |
Список | pgsql-ru-general |
Имеется БД в которой есть текстовое поле где хранится одно или несколько слов в каждом id text 1 Привет 2 Привет медвед 3 вася 4 пупкин 5 вася пупкин 6 вася пупкин сказал привет медвед ... Далее пользователь начинает вводить текст, хотим комплитить ему считая что он вводит с начала слова. пользователь может ввести несколько слов что сделали: 1. написали функцию которая по фразе возвращает массив составляющих ее сабфраз array[] по убыванию, пометили ее immutable (то есть на фразу 'вася пупкин сказал привет медвед' будет 5 вариантов: 'вася пупкин сказал привет медвед', 'пупкин сказал привет медвед', 'сказал привет медвед', 'привет медвед' и 'медвед') 2. построили 5 индексов по первым 5 словам в каждой фразе 3. при поиске выбираем по 20 штук из каждого индекса и смешиваем ну и получается человек начинает вводить 'мед' получает 2 и 6 вариант а начинает вводить 'при' получает 1, 2, 6 варианты (в индексе lower лежат) все работает ок, но есть ОЧЕНЬ редкие случаи когда пользователь начинает вводить 6 или 7 слово. можно и по ним конечно индексы достроить... но в целом примененный подход по сути итак равен 5 выборкам из индекса, плюс куча избыточных данных в выборке. может как-то можно подобную задачу решить более оригинально? -- . ''`. Dmitry E. Oboukhov : :’ : email: unera@debian.org jabber://UNera@uvw.ru `. `~’ GPGKey: 1024D / F8E26537 2006-11-21 `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Вложения
В списке pgsql-ru-general по дате отправления: