items
假设一个像这样的 postgresql 表。(keywords
列是类型text[]
)
name account_id keywords
------------------------------
foo1 1 ['k1', 'k2']
foo2 1 ['k1', 'k3']
foo3 2 ['k4', 'k1']
foo4 2 ['k1', 'k6']
items 中的每一行都与 a 相关Account
(该表实际上由 account_id 拆分)。我们想要进行如下查询:“帐户 1 的关键字 k1 的项目”。此查询需要对account_id
和keywords
列的复合 GIN 索引。
实际上,我们需要一个倒排索引,行如下:(每行的键应该是复合的)
(account_id, keyword) --> [item1, item2, ...]
在 postgresql 中创建此索引的正确方法是什么?
答案与这个问题的答案相同:Inner join using an array column
要点是安装
btree_gin
扩展(这可能需要额外的包,比如postgresql-contrib
)然后,可以通过以下方式轻松启用扩展:(需要 postgresql >= 9.1)
CREATE EXTENSION btree_gin;
并且可以使用以下方法创建索引:
CREATE INDEX index_name ON items USING GIN (account_id, keywords);