如何在Postgresql中创建多列GiST索引

时间:2016-06-30 00:03:23

标签: postgresql psql tsvector

postgresql documentation指定GiST索引可以有多个列,但不提供这样的示例。

我有一张表来跟踪不同客户拥有的资产。

CREATE TABLE asset (
    id serial PRIMARY KEY,
    description text NOT NULL,
    customer_id uuid NOT NULL
);

我正在编写一个查询,允许客户根据其中的字词搜索资产。

SELECT *
FROM asset
WHERE to_tsvector('english', asset.description) @@ plainto_tsvector('english', ?)
AND asset.customer_id = ?;

如果这是一个非tsvector查询,我构建一个简单的多列索引

CREATE INDEX idx_name ON asset(customer_id, description);

我可以在tsvector上创建一个索引:

CREATE INDEX idx_name ON asset USING gist(to_tsvector('english', asset.description));

但是,查询优化器并没有使用gist索引,因为它似乎希望先进行customer_id过滤。有没有办法可以在gist索引中包含非tsvector字段customer_id,不知何故,还是我运气不好?

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法在Postrgres中创建多列GIN或GiST索引:

CREATE INDEX index_name 
ON table_name 
USING gist (field_one gist_trgm_ops, field_two gist_trgm_ops);