Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заставить ts_rank не учитывать двойные совпадения, Postgres 9.3, full text search 
:(
    Опции темы
kami
Дата 25.12.2014, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 72



Добрый день уважаемые!
Есть таблица, в ней индекс:
Код

CREATE INDEX "IX_FTS"  ON public.mytable  USING gin  (to_tsvector('simple'::regconfig, "NormalizedObjectName"::text));


Есть запрос к таблице:
Код

  SELECT
      ts_rank(to_tsvector('simple',"NormalizedObjectName"), to_tsquery('simple', 'са:*'), 0) AS rank,
      "ObjectName"
    FROM  public.mytable
    WHERE
      to_tsvector('simple',"NormalizedObjectName")@@to_tsquery('simple', 'са:*')
    ORDER BY rank DESC, "ObjectName" ASC 
    LIMIT 30


  в таблице есть записи типа "сам самыч", "сани самоездящие", "салют 'стреляй сам'" и т.п.

Проблема: указанный запрос вот таким вот записям делает rank*2, к примеру:
Код

 0.121585;  "сам самыч" -- два вхождения - rank в 2 раза больше...
0.0607927;  "сабля декоративная"


Пробовал: использовать третий параметр у ts_rank, но: 
- 1, 2, 8, 16 не подошли, т.к. выдача не должна зависеть от длины текста (да, 8 и 16 - не совсем длина, но все же косвенно зависят от нее)
- 4 - вообще не понял, что она делает, но результаты выдачи неудовлетворительные.
- 32 - практически то же, что и 0

Вопрос: как сделать так, чтобы в подобных записях ts_rank учитывал только первое вхождение поисковой строки и ни в коем случае не умножал на n выдачу?

P.S. Шаблон "simple" был использован намеренно, т.к. russian считает себя слишком умным и его поведение отличается от необходимого.

Это сообщение отредактировал(а) kami - 25.12.2014, 12:04
PM MAIL WWW   Вверх
tzirechnoy
Дата 26.12.2014, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Перепишы ts_rank. Сишный исходник для размышлений можно взять в дереве postgresql.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.