使用 GIN 为 JSON 列建立索引

Mun*_*man 2 postgresql json postgresql-9.4

我需要根据文档在我的表中的 JSON 列上添加索引我正在执行类似于下面的查询。

CREATE INDEX idxgin ON api USING gin (jdoc);

我收到以下错误:

错误:数据类型 json 没有用于访问方法“gin”的默认运算符类
提示:您必须为索引指定运算符类或为数据类型定义默认运算符类。

这是文档的链接。

Md *_*han 6

GiN(Generalized Inverted Index)是倒排索引,一种结构,每个键只有一个索引条目,并存储所有键行的映射信息(发布列表)以在索引条目中具有相同的值。在 postgreSQL 中,键存储在索引条目中,键的映射信息存储在发布树中。搜索索引条目和发布树是使用 B 树。因此,当索引必须将许多值映射到行时,GIN 很有用,例如索引数组、文档。

我想在创建 GIN index 之前,您犯了一些错误。正如你在这里看到的postgresql GIN pg_trgm 默认操作符类

要创建 GIN(通用倒排索引),语法应该是这样的

CREATE INDEX name ON table USING gin(column);
Run Code Online (Sandbox Code Playgroud)

创建基于 GIN(通用倒排索引)的索引。该列必须是 tsvector 类型。

默认运算符类 jsonb_ops 支持存在运算符( ?, ?&, ?| )和包含运算符( @> )。并且 jsonb_path_ops 仅支持包含操作符。因此 GIN 索引只能搜索具有特定键或键值的。

当我们使用 JSONB 的 ->> 运算符时,PostgreSQL 可以使用 B-tree 或 Hash 索引来处理操作。->> oerator 以文本格式返回指定属性的值。PostgreSQL 可以使用文本结果的索引作为比较操作数。GIN 索引可以被 GIN jsonb 操作符类使用。

此处查看 json 运算符

进一步参考这里这里