Found pretty bad time of creating gin index :) CVS HEAD with non-modified postgresql.conf (tried to increase maintenance_work_mem tp 64Mb, but results stay the same).
words=# \d w
Table "public.w"
Column | Type | Modifiers
--------+------------------+-----------
word | text |
f1 | double precision |
f2 | double precision |
words=# show tsearch_conf_name;
tsearch_conf_name
-------------------
public.test
words=# \dF+ test
Configuration "public.test"
Parser name: "pg_catalog.default"
Locale: 'C'
Token | Dictionaries
--------------+-------------------
hword | pg_catalog.simple
lhword | pg_catalog.simple
lpart_hword | pg_catalog.simple
lword | pg_catalog.simple
nlhword | pg_catalog.simple
nlpart_hword | pg_catalog.simple
nlword | pg_catalog.simple
part_hword | pg_catalog.simple
word | pg_catalog.simple
words=# create index gin_idx on w using gin(word);
CREATE INDEX
Time: 147324.213 ms
words=# create index bt_idx on w(word);
CREATE INDEX
Time: 26284.108 ms
Looks like it's simple dictionary, since for default
words=# show tsearch_conf_name;
tsearch_conf_name
-------------------------
pg_catalog.russian_utf8
(1 row)
Time: 1.117 ms
words=# create index gin_idx on w using gin(word);
CREATE INDEX
Time: 70558.607 ms
In this configuration snowball stemmer is used. Index creation time is better, but still 3 times bigger than plain btree index. Also, index size is:
words=# select pg_relation_size('w');
pg_relation_size
------------------
44990464
words=# select pg_relation_size('bt_idx');
pg_relation_size
------------------
23420928
words=# select pg_relation_size('gin_idx');
pg_relation_size
------------------
32841728