首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GIN索引实现

GIN索引实现
EN

Stack Overflow用户
提问于 2022-07-20 06:49:50
回答 1查看 73关注 0票数 -1

通常,Trigram索引应该将这些值的Trigram存储在索引值中。我已经了解了GIN索引的结构以及它们如何存储这些值。有一件事我被困住了,那就是,他们是否会存储所给文本的三联图,或者是文本本身。

我读过一些文章,它们都显示了用‘ve向量存储单词的gin索引

如果是这样的话,GIN索引不应该适用于类似

代码语言:javascript
复制
SELECT * FROM table WHERE data LIKE '%word%';

但这似乎也适用于这种情况。我使用了一个百万行的数据库,其中我正在搜索的列是一个大小为30的随机文本。我没有使用the向量,因为列只是一个大小为30的单词。示例列值: bVeADxRVWpCeEHyNLxxfkfVkSAKkKw

但是,如果使用trgm_gin_ops在本专栏中使用gin索引,模糊搜索似乎要快得多。效果很好。

但是,如果gin只是像上面的图像中显示的那样存储单词,那么它不应该对%word%起作用。但确实如此,这就引出了一个问题: gin索引是简单地由文本值组成还是由文本值的三元组组成?

我的整个问题可以简化为:如果我创建一个索引列,其值为“bVeADxRVWpCeEHyNLxxfkfVkSAKkKw”,那么只需对该值进行索引,还是将值的三叉存储在它的索引树中。(bVe,VeA,eAD,.,kKw)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 02:34:56

GIN GIN代表广义。它只适用于要索引的每个元组字段的标记列表,但该标记实际上代表的是要定义和提取的运算符类。The的默认操作符类使用词干词,运算符类"gin_trgm_ops“(用于文本,而不是用于文本的默认操作符)使用trigram。一个基于一个的例子对另一个的适用性将是有限的。要以一种广义的方式理解它,您需要考虑标记只是标签。一个令牌可以指向多个行,一个行可以被多个标记指向。一旦你进入令牌的含义,那是操作者类的事情,而不是杜松子酒机器本身的事务。

当使用gin_trgm_ops时,'%word%‘分解为'wor’和'ord',这两个词都必须存在于索引中(对于同一行),以便'%word%‘可能匹配。但是“ord also worry”中也有这两种类型,因此它将通过位图索引扫描,但被重新检查拒绝。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73047103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档