64.1. Introduction

GIN 代表广义倒排索引。 GIN 设计用于处理要构建索引的项目是复合值的情况,并且要由索引处理的查询需要搜索出现在复合项目内的元素值。例如,项目可以是文档,而查询可以是对包含特定单词的文档的搜索。

我们使用单词* item 表示要索引的复合值,使用单词 key *表示元素值。 GIN 总是存储和搜索键,而不是项值本身。

GIN 索引存储一组(键,发布列表)对,其中*“发布列表”是其中发生键的一组行 ID。由于一个项目可以包含多个键,因此同一行 ID 可以出现在多个发布列表中。每个键值仅存储一次,因此对于相同键多次出现的情况,GIN 索引非常紧凑。

GIN 是广义的,因为 GIN 访问方法代码不需要知道其加速的特定操作。相反,它使用为特定数据类型定义的自定义策略。该策略定义了如何从索引项和查询条件中提取键,以及如何确定在查询中包含某些键值的行是否 true 满足查询条件。

GIN 的一个优点是,它允许数据类型领域的 maven 而不是数据库 maven 使用适当的访问方法来开发自定义数据类型。这与使用 GiST 的优势几乎相同。

PostgreSQL 中的 GIN 实现主要由 Teodor Sigaev 和 Oleg Bartunov 维护。在他们的website上有关于 GIN 的更多信息。