Re: [pgsql-ru-general] GIN индекс: сортировка

From: Oleg Bartunov <obartunov(at)gmail(dot)com>
To: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] GIN индекс: сортировка
Date: 2014-09-29 17:21:55
Message-ID: CAF4Au4wswrToTf5vWcrTDrr55Ewo1=r6YpTduGWvN4BQLsHiOQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Дмитрий, посмотри на
http://www.sai.msu.su/~megera/postgres/talks/pgcon-2012.pdf
http://sigaev.ru/git/gitweb.cgi?p=smlar.git;a=summary

Олег

2014-09-29 18:39 GMT+04:00 Dmitry E. Oboukhov <unera(at)debian(dot)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(at)debian(dot)org jabber://UNera(at)uvw(dot)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-----
>
>

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2014-09-29 19:45:41 Re: GIN индекс: сортировка
Previous Message Dmitry E. Oboukhov 2014-09-29 14:39:31 GIN индекс: сортировка