我正在尝试在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
的原因是我将使用Django的ORM,它将自动将COALESCE
添加到查询中。
我在做什么错了?