我有一个现有的Postgres 9.3数据库,其中有一个包含varchar列的表。
Table "public.frontend_chemical"
Column | Type | Modifiers
-----------+------------------------+-----------
bnf_code | character varying(9) | not null
chem_name | character varying(200) | not null
我希望在
chem_name
列上运行全文搜索。我阅读了这篇文章,其中建议的步骤如下:
1. 添加一个新的
tsvector
列:ALTER TABLE frontend_chemical ADD COLUMN fts_document tsvector;
2. 创建一个将chem_name
列映射到文档的函数和一个触发器以保持其更新。
3. 在该列上创建GIN索引:CREATE INDEX chem_fts_index ON frontend_chemical USING gin(fts_document)
;然后我应该能够运行全文搜索查询,如:
SELECT COUNT(*) FROM frontend_chemical WHERE fts_document @@ 'statin';
。首先,这一般的过程正确吗?
其次,如何将所有现有的
chem_name
列中的条目映射到fts_document
列?文章中的示例似乎只在更新chem_name
列时更新document
列,而我有一个大型现有数据库。
select * from frontend_chemical where to_tsvector('simple', chem_name) @@ to_tsquery('Ro')
没有结果,而select * from frontend_chemical where chem_name like 'Ro%'
却有很多结果。我是否误解了如何进行查询? - Richard\d
表示索引在表中一定存在:"chem_fts_index" gin (to_tsvector('simple'::regconfig, chem_name::text))
,我也运行了ANALYZE
。 - Richard