我认为您应该研究全文搜索。
在 postgresql 中,您要做的是创建一个 tsvector 类型的列,该列由其他列的分解版本组成。它会处理词干。
alter table TABLE add column tsv_description tsvector;
然后你需要填充它。
UPDATE TABLE SET tsv_description = (to_tsvector('pg_catalog.english',coalesce(searchname, '')) || (to_tsvector('pg_catalog.english',coalesce(searchbrand, '')) || to_tsvector('pg_catalog.english',coalesce(othercol, ''));
然后您可以像这样使用 to_tsquery 进行查询:
select * from TABLE where tsvdescription @@ plainto_tsquery('pg_catalog.english','my super full text query');
您还可以即时将列转换为 tsvector,但速度较慢。
select * from TABLE where to_tsvector(searchname) || to_tsvector(searcbrand) @@ plainto_tsquery('pg_catalog.english','tocino');