powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Полнотекстовый поиск Postgres
16 сообщений из 41, страница 2 из 2
Полнотекстовый поиск Postgres
    #40082623
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
O_79_O
пропущено...

Максим исходя из опыта можете сказать,насколько сильно деградирует производительность при добавлении этих 4 индексов?
например при вставке/удалении особенно пачками


заведомо на меньше чем от добавления FTS GIN индекса который очень тяжелый сам по себе.
а более конкретно ответить на вопрос "насколько сильно" невозможно берите и тестируйте это же вам надо а не мне.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


ПОнял,спасиб

сейчас тестирую FTC не пойму почему не идет индексное сканирование

вот сам индекс

Код: plsql
1.
2.
create index test_gin on respondent using GIN (to_tsvector('russian',first_name || ' ' || last_name || ' ' || patronymic || ' '
  || email));



вот запрос

Код: plsql
1.
2.
3.
4.
explain analyze
select * from respondent
where to_tsvector(first_name || ' ' || last_name || ' ' || patronymic || ' '
  || email) @@ plainto_tsquery('пётра      дайнека (**??% викторовича');




вот аналитика

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
Gather  (cost=1000.00..543517.63 rows=1 width=276) (actual time=2711.236..13188.142 rows=3 loops=1)
  Workers Planned: 2
  Workers Launched: 2
  ->  Parallel Seq Scan on respondent  (cost=0.00..542517.53 rows=1 width=276) (actual time=6679.406..13147.197 rows=1 loops=3)
        Filter: (to_tsvector(((((((first_name || ' '::text) || last_name) || ' '::text) || patronymic) || ' '::text) || email)) @@ plainto_tsquery('пётра      дайнека (**??% викторовича'::text))
        Rows Removed by Filter: 666669
Planning Time: 0.154 ms
Execution Time: 13188.170 ms




что то я упустил подскажите пожалуйста
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082626
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

у вас есть индекс using btree(foo(column)). Почему postgresql не использует его для запроса "where bar(column) = 10" ?
Вам не кажется этот вопрос странным?
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082629
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij
O_79_O,

у вас есть индекс using btree(foo(column)). Почему postgresql не использует его для запроса "where bar(column) = 10" ?
Вам не кажется этот вопрос странным?

не понял вопроса? вы намекаете на разные колонки при поиске и индексации- у меня же теже самые при создании индекса и при поиске
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082630
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

вы аналогично используете разные функции в запросе и в индексе
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082633
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij
O_79_O,

вы аналогично используете разные функции в запросе и в индексе

все увидел,спасибо

тут сразу назревает вопрос - почему тогда индекс не создается без 'russian'
получаю ошибку 7] ОШИБКА: функции в индексном выражении должны быть помечены как IMMUTABLE

я бы хотел использовать дефолтный конфиг ,без конкретизации языка - не подскажите есть ли такая возможность?
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082643
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

потому что функция в индексе не должна меняться при изменении конфигурации базы. А то default_text_search_config можно менять хоть в каждой транзакции разный. И чтобы потом не огребать "якобы" "полезные" баг-репорты "ваш индекс хрень, чините" при очевидной ошибке оператора - добавлена минимальная проверка-требование immutable функции в create index, чтобы мешать стрелять в ноги.
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082645
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,
логично,спасибо
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082657
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня еще такой ворпос возник - влияет ли на расположение в фильтре условий на планировку запроса-тоесть после полнотекстового поиска у меня там еще идут обычные фильтры по полям этой таблицы - например пол ,возраст и тд
так вот влияет ли расстановка фильтров- например
сначала where .... полнотекстовый поиск and sex='M' and age betwee 1 and 100
будет ли для постгреса это принципиально или же порядок фильтрации ему не важен?
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082699
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
У меня еще такой ворпос возник - влияет ли на расположение в фильтре условий на планировку запроса-тоесть после полнотекстового поиска у меня там еще идут обычные фильтры по полям этой таблицы - например пол ,возраст и тд
так вот влияет ли расстановка фильтров- например
сначала where .... полнотекстовый поиск and sex='M' and age betwee 1 and 100
будет ли для постгреса это принципиально или же порядок фильтрации ему не важен?


порядок указания условий в where не важен для базы.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082706
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,подскажите пожалуйста как с помощью подобного запроса найти записи у которых
имя фамилия или отчество null как все вместе так и сборно- например может быть только имя

Код: plsql
1.
2.
3.
4.
explain analyze
select * from respondent
where to_tsvector(first_name || ' ' || last_name || ' ' || patronymic || ' '
  || email) @@ plainto_tsquery(null);
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082708
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по идее же должен рабоать такой поиск

Код: plsql
1.
2.
3.
 select * from respondent where
to_tsvector('russian',coalesce(first_name,'') || ' ' || coalesce(last_name,'') || ' ' || coalesce(patronymic,'') || ' '
                        || email) @@ plainto_tsquery('russian','');
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082781
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
Maxim Boguk,подскажите пожалуйста как с помощью подобного запроса найти записи у которых
имя фамилия или отчество null как все вместе так и сборно- например может быть только имя

Код: plsql
1.
2.
3.
4.
explain analyze
select * from respondent
where to_tsvector(first_name || ' ' || last_name || ' ' || patronymic || ' '
  || email) @@ plainto_tsquery(null);



Это задача не для FTS а дня нормальных индексов или просто запросов.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082782
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
O_79_O
Maxim Boguk,подскажите пожалуйста как с помощью подобного запроса найти записи у которых
имя фамилия или отчество null как все вместе так и сборно- например может быть только имя

Код: plsql
1.
2.
3.
4.
explain analyze
select * from respondent
where to_tsvector(first_name || ' ' || last_name || ' ' || patronymic || ' '
  || email) @@ plainto_tsquery(null);



Это задача не для FTS а дня нормальных индексов или просто запросов.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


Это понятно ,но это один фильтр и не очень хочется делать много разные вариантов запросов

пока придумал только вот такое
Код: plsql
1.
2.
select * from respondent where
to_tsvector('russian',coalesce(first_name,'null')) @@ plainto_tsquery('russian','null');



ну и индекс такой же,почему то plainto_tsquery('russian',' ')не работает так как ожидалось - оно в принципе и понятно там же наоборот пробелы чистит

я вот думаю может можно с помощью регулярки как то это сделать
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40082913
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребят так нет ни у кого идеи как с помощью этой конструкции искать записи с null полями?
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40083008
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
select * from respondent
where first_name is null or last_name is null or patronymic is null
...
Рейтинг: 0 / 0
Полнотекстовый поиск Postgres
    #40083029
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Код: sql
1.
2.
select * from respondent
where first_name is null or last_name is null or patronymic is null


хех не ,так не пойдет,нужно в рамках вот этоого запроса такой же результат получить,как в вашем запросе
Код: plsql
1.
2.
3.
 select * from respondent where
to_tsvector('russian',coalesce(first_name,'') || ' ' || coalesce(last_name,'') || ' ' || coalesce(patronymic,'') || ' '
  || email) @@ plainto_tsquery('russian', ???? )
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Полнотекстовый поиск Postgres
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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