我对数据库并不熟悉,也不太了解索引是如何工作的。
我正在研究索引我的列中包含加权的the向量的列(标题的权重最大,其次是子标题,然后是段落内容)。根据Postgres文档,GIN是全文搜索的最佳选择,其次是GiST。然而,第12.9章有一个说明:
GIN索引是首选的文本搜索索引类型。作为倒排索引,它们包含每个单词的索引条目(lexeme),其中包含匹配位置的压缩列表。多词搜索可以找到第一个匹配项,然后使用索引删除缺少其他单词的行。GIN索引只存储the向量值的单词(词),而不存储它们的权重标签。因此,当使用涉及权重的查询时,需要重新检查表行。
这是否意味着杜松子酒在我的用例中效率低下,我应该使用GiST,还是它仍然是最好的?我正在使用最新的Postgres版本(12)。
发布于 2020-02-13 06:59:51
不,你应该坚持使用杜松子酒索引。
索引扫描起到过滤器的作用,希望消除大部分行,因此只需要重新检查很少行。
无论如何,您可能必须获取表行,所以除非在索引扫描过程中发现许多假阳性,否则不会有太多额外的工作。
最好是在数据集上运行一些基准,这将为您提供一个权威的答案,在您的情况下哪个索引更好。
为了找出在位图堆扫描过程中排除了多少假阳性,您可以检查查询的EXPLAIN (ANALYZE, BUFFERS)输出。
发布于 2020-02-13 18:34:05
对于to向量,GiST索引的实现是有损的,因此它们也需要查询表。文档的这一部分很奇怪,因为它似乎将GIN与GiST进行了对比,但GIN和GiST都没有存储权重,因此没有什么可对比的。(GiST甚至不存储这些值,更不用说权值,只是值的一部分)。
此外,权重只在排名时使用,而不是在搜索时使用。
对于the向量,只有当您想要一个多色索引时,GiST才会被优先考虑,在这个索引中,您将对不同的列一起选择ANDing标准。
https://stackoverflow.com/questions/60198680
复制相似问题