Я пытаюсь реализовать полнотекстовый поиск в Django и PostgreSQL.Функционально это работает.Но у меня были трудности с добавлением индекса GIN для улучшения его производительности.
Вот как я создал индекс:
CREATE INDEX make_model_gin_index ON public.vehicle USING gin (to_tsvector('english'::regconfig, (((make)::text || ' '::text) || (model)::text)))
Теперь, когда я делаю запрос следующим образом:
select make, model
from vehicle
where to_tsvector('english', make || ' ' || model) @@ to_tsquery('mersedes')
limit 1000;
Используется индекс:
-> Bitmap Index Scan on make_model_gin_index (cost=0.00..721.10 rows=35847 width=0)
Однако, если я добавлю COALESCE
в запрос следующим образом:
select make, model
from vehicle
where to_tsvector('english', coalesce(make, '') || ' ' || coalesce(model, '')) @@ to_tsquery('mersedes')
limit 1000;
, индекс не будет использоваться.
Причина, по которой я хочу добавить COALESCE
, заключается в том, что я буду использовать ORM Джанго, и он автоматически добавит COALESCE
в запрос.
Что я делаю не так?