我创建了一个表来调查文本搜索和使用GIST和GIN索引:
CREATE TABLE test
(
id serial NOT NULL,
the_text text,
CONSTRAINT test_pkey PRIMARY KEY (id)
)
并添加了一些随机值:
insert into test values (generate_series(1,100000), md5(random()::text))
想要创建GIN索引:
create index on test using gin(the_text);
但我有一个错误:
错误:数据类型文本没有访问方法“gist”的默认运算符类
你可以帮帮我吗?
答案 0 :(得分:5)
您还需要启用 :btree_gin
或 :btree_gist
,因为它是 CREATE INDEX 工作的某种依赖。以下对我有用并修复了消息 ERROR: data type text has no default operator class for access method "gin"
CREATE EXTENSION pg_trgm;
CREATE EXTENSION btree_gin;
CREATE INDEX index_email_gin ON users USING GIN (email);
答案 1 :(得分:2)
使用full text搜索:
CREATE INDEX test_gin_idx ON test USING gin (to_tsvector('english', the_text));
对于trigram搜索,您可以使用pg_trgm
扩展名
CREATE EXTENSION pg_trgm;
CREATE INDEX test_the_text_gin_idx ON test USING GIN (the_text gin_trgm_ops);