Thread: Re: Полнотекстовый поиск в 8.3
В документации все написано и в 8.4 трех собак не будет, все решено Олег On Fri, 21 Nov 2008, Andrey N. Oktyabrski wrote: > Здравствуйте. > > Обнаружил пренеприятнейшую вещь: > cms1=# EXPLAIN ANALYZE SELECT id FROM _fts_text fts WHERE fts.vector @@@ > to_tsquery('некоторые | слова'); > QUERY PLAN > ------------------------------------------------------- > Bitmap Heap Scan on _fts_text fts (cost=273.04..1261.39 rows=274 width=4) > (actual time=14.164..6063.459 rows=26651 loops=1) > Filter: (vector @@@ to_tsquery('некоторые | слова'::text)) > -> Bitmap Index Scan on fts_text_vector_idx (cost=0.00..272.97 rows=274 > width=0) (actual time=11.314..11.314 rows=27472 loops=1) > Index Cond: (vector @@@ to_tsquery('некоторые | слова'::text)) > Total runtime: 6074.753 ms > (5 rows) > > cms1=# EXPLAIN ANALYZE SELECT id FROM _fts_text fts WHERE fts.vector @@ > to_tsquery('некоторые | слова'); > QUERY PLAN > ------------------------------------------------------- > Bitmap Heap Scan on _fts_text fts (cost=273.04..1261.39 rows=274 width=4) > (actual time=18.213..845.861 rows=26651 loops=1) > Recheck Cond: (vector @@ to_tsquery('некоторые | слова'::text)) > -> Bitmap Index Scan on fts_text_vector_idx (cost=0.00..272.97 rows=274 > width=0) (actual time=14.879..14.879 rows=27472 loops=1) > Index Cond: (vector @@ to_tsquery('некоторые | слова'::text)) > Total runtime: 854.274 ms > (5 rows) > > Планы отличаются только одной строчкой - в одном Filter, в другом Recheck > Cond. Вот, собственно, почему они отличаются? Что можно сделать, чтобы три > собаки работали если не так же быстро, то хотя бы не на порядок медленнее? > > Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83
On Sat, 22 Nov 2008, Andrey N. Oktyabrski wrote: > Oleg Bartunov wrote: >> В документации все написано и в 8.4 трех собак не будет, все решено > Ну вот, как всегда - ослепил светлым будущим, послал учить матчасть и за сим > откланялся ;-) > > Документацию-то я почитал, сейчас перечитал еще раз. Не полегчало, хотя со > второго раза стало предельно ясно, почему Filter :-) Я думал, может патчик > уже есть какой-нибудь на эту тему, я бы его потестировал с удовольствием. Или > кто как решает подобную задачу внешним монтажом. А то 8.4 ждать долго еще... нет, патчик там больно сложный получится. Там не в нас дело было, в основном. как паллиатив, можно просто отдельный индекс сделать по словам с разными весами. Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83
Здравствуйте. Обнаружил пренеприятнейшую вещь: cms1=# EXPLAIN ANALYZE SELECT id FROM _fts_text fts WHERE fts.vector @@@ to_tsquery('некоторые | слова'); QUERY PLAN ------------------------------------------------------- Bitmap Heap Scan on _fts_text fts (cost=273.04..1261.39 rows=274 width=4) (actual time=14.164..6063.459 rows=26651 loops=1) Filter: (vector @@@ to_tsquery('некоторые | слова'::text)) -> Bitmap Index Scan on fts_text_vector_idx (cost=0.00..272.97 rows=274 width=0) (actual time=11.314..11.314 rows=27472 loops=1) Index Cond: (vector @@@ to_tsquery('некоторые | слова'::text)) Total runtime: 6074.753 ms (5 rows) cms1=# EXPLAIN ANALYZE SELECT id FROM _fts_text fts WHERE fts.vector @@ to_tsquery('некоторые | слова'); QUERY PLAN ------------------------------------------------------- Bitmap Heap Scan on _fts_text fts (cost=273.04..1261.39 rows=274 width=4) (actual time=18.213..845.861 rows=26651 loops=1) Recheck Cond: (vector @@ to_tsquery('некоторые | слова'::text)) -> Bitmap Index Scan on fts_text_vector_idx (cost=0.00..272.97 rows=274 width=0) (actual time=14.879..14.879 rows=27472 loops=1) Index Cond: (vector @@ to_tsquery('некоторые | слова'::text)) Total runtime: 854.274 ms (5 rows) Планы отличаются только одной строчкой - в одном Filter, в другом Recheck Cond. Вот, собственно, почему они отличаются? Что можно сделать, чтобы три собаки работали если не так же быстро, то хотя бы не на порядок медленнее?
Oleg Bartunov wrote: > В документации все написано и в 8.4 трех собак не будет, все решено Ну вот, как всегда - ослепил светлым будущим, послал учить матчасть и за сим откланялся ;-) Документацию-то я почитал, сейчас перечитал еще раз. Не полегчало, хотя со второго раза стало предельно ясно, почему Filter :-) Я думал, может патчик уже есть какой-нибудь на эту тему, я бы его потестировал с удовольствием. Или кто как решает подобную задачу внешним монтажом. А то 8.4 ждать долго еще...