Thread: Re: [pgsql-ru-general] GIN индекс: сортировка
Дмитрий, посмотри на http://www.sai.msu.su/~megera/postgres/talks/pgcon-2012.pdf
http://sigaev.ru/git/gitweb.cgi?p=smlar.git;a=summary
Олегhttp://sigaev.ru/git/gitweb.cgi?p=smlar.git;a=summary
2014-09-29 18:39 GMT+04:00 Dmitry E. Oboukhov <unera@debian.org>:
есть большая база текстушек
id, text1, text2, text3, text4, ... text10
она местами разрежена (то есть text3 и text5 скажем могут быть равны
null)
далее
в поисковом запросе юзер вводит поля через запятую от одного до десяти
полей, но может вводить их в разном порядке
соответственно построил я GIN индекс так
CREATE INDEX ... USING
GIN ((ARRAY[text1, text2, text3, text4, ... text10]))
далее ищу в таблице так
SELECT
*
FROM
table
WHERE
ARRAY[text1, text2, text3, text4, ... text10] @>
ARRAY[user_text1, ... user_textn]
LIMIT
10
Ищет быстро и хорошо
но хочется тут двух вещей
1. сортировки по близости
то есть хочу чтобы сперва выдавались наиболее (или наоборот наименее)
заполненные записи.
то есть если в базе лежит
'text1', NULL, NULL, 'text4', 'text5', ...
'text1', 'text2', 'text3', 'text4', 'text5', ...
А юзер в поиске прислал text1 и text4, то я хочу чтобы либо первый
вариант выдавался в первую очередь, либо наоборот - второй, в
зависимости от настроек.
вопрос: можно ли выбрать это из индекса?
2. сортировки по порядку
если юзер ввел 'text5', 'text1', можно ли чтобы это либо не
находилось, либо иметь возможность чтобы оно попадало куда-то вглубь
выборки (то есть первыми выводились бы записи с текстовым И
позиционным совпадением, а далее только текстовым)?
Ну и еще вопрос, уже наверное не про GIN, хотя может и про него
предполагаем что пользователь вводит фразу
text1, text2, abc
сплитим фразу по запятым,
все кроме последней части считаем точными совпадениями, а вот
последнюю часть считаем частью ввода.
то есть хочу чтобы индекс отвечал на вопрос
"все поля, содержащие в себе text1 и text2 и плюс к этому любое поле,
начинающееся (или содержащее в себе) с букв abc"
Можно ли последнее упихать как-то в ОДИН индекс?
--
. ''`. 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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iEYEAREDAAYFAlQpbyMACgkQq4wAz/jiZTc93QCgkotCq6qNDiQMe1etX8USjQeG
n3wAoNEEzwpsKYn8HZCBA89NFjaQxIH5
=kKXr
-----END PGP SIGNATURE-----