Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / полнотекстовый поиск в postgresql / 10 сообщений из 10, страница 1 из 1
19.08.2015, 15:08
    #39032465
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
Доброе время суток!
столкнулся с такой проблемой. есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Table "public.test"
  Column  |   Type   | Modifiers 
----------+----------+-----------
 id       | integer  | not null
 title    | text     | 
  
Indexes:
    "test_pkey" PRIMARY KEY


в title заносится строчка слов через запятую. поиск я осуществляю конструкцией:
Код: sql
1.
SELECT title FROM public.test WHERE title LIKE '%слово или фраза%';


но проблема в том что время поиска очень большое, по тестам это 1,1-1,3 секунды. смотрел в сторону индекса GIN. но так толком и не понял как им пользоваться.
пример того что мне требуется. допустим в title лежит строчка "мама, папа, я, вместе дружная семья"
человек зайдя на сайт вводит слова скажем "мама я" и ему всплывает подсказка - есть три строчки, выберите нужную.
...
Рейтинг: 0 / 0
19.08.2015, 15:13
    #39032476
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
создал индекс GIN:
Код: sql
1.
CREATE INDEX title_idx ON public.test USING gin(to_tsvector('russian', title));


делаю запрос вида:
Код: sql
1.
SELECT title FROM  public.test WHERE title @@ 'слово или фраза';


но время выполнения доходит до минуты.
мысли такие или в индекс попали все фразы вместе с запятыми и их от туда надо убрать. или я в корне делаю не так как нужно.
что подскажут светлые головы
...
Рейтинг: 0 / 0
19.08.2015, 15:25
    #39032501
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
evgen25,

А вы читали документацию вообще ? Сколько у вас документов, какой explain analyze ?



postgres=# select to_tsvector('russian','мама, папа, я, вместе дружная семья') @@ to_tsquery('russian','мамой | папой');
?column?
----------
t
(1 row)

Time: 0.372 ms
postgres=# select to_tsvector('russian','мама, папа, я, вместе дружная семья') @@ to_tsquery('russian','мамой & папой');
?column?
----------
t
(1 row)
...
Рейтинг: 0 / 0
19.08.2015, 15:44
    #39032523
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
Oleg Bartunov,
Код: sql
1.
2.
3.
4.
5.
6.
#EXPLAIN (ANALYZE) SELECT * FROM public.test;
                                                      QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
 Seq Scan on test  (cost=0.00..53207.29 rows=1035829 width=289) (actual time=0.011..182.252 rows=1035957 loops=1)
 Total runtime: 225.993 ms
(2 строки)
...
Рейтинг: 0 / 0
19.08.2015, 15:53
    #39032538
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
...
Рейтинг: 0 / 0
19.08.2015, 19:58
    #39032735
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
получился вот такой запрос
Код: sql
1.
2.
3.
SELECT title
FROM public.test
WHERE to_tsvector('russian', title) @@ to_tsquery('russian', 'слово или фраза для поиска');


время выполнения запроса 0.2-0.4 секунды. результат меня порадовал
...
Рейтинг: 0 / 0
19.08.2015, 20:49
    #39032749
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
еще один вопрос появился. когда поиск был через like поиск осуществлялся конструкцией %like%. как сделать любые в конце строки я нашел. а как добавить любые символы в начале строки?
...
Рейтинг: 0 / 0
20.08.2015, 08:39
    #39032853
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
Использовать регулярные выражения
...
Рейтинг: 0 / 0
21.08.2015, 06:44
    #39033616
evgen25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
big-trot,

а можно пример
...
Рейтинг: 0 / 0
21.08.2015, 08:51
    #39033645
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полнотекстовый поиск в postgresql
^.*
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / полнотекстовый поиск в postgresql / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]