我有一个postgres数据库,其中包含一个包含100维word嵌入的文档表,并使用它来查找类似的文档。
CREATE TABLE documents(
id bigint,
title text,
body text,
vector double[],
PRIMARY KEY(id)
);
我已经安装了cube
扩展,并使用它从选定的文档中按相似度对文档进行排序,如下所示(如here所述):
SELECT id,title,body FROM documents ORDER BY cube(documents.vector)
<-> '(0.0990813672542572021,.. 0.0537704713642597198)'::cube LIMIT 10;
我在这里设置了索引:CREATE INDEX ix_vect ON documents USING gist (cube(vector));
我得到了预期的结果,但是对于大约200万行的表,查询时间非常长,约为30-45秒。我如何提高性能以将其降低到可接受的水平,即在数百万行中小于1秒?
发布于 2020-06-13 08:23:18
通过doc使用CUBE的正确方法
SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;
https://stackoverflow.com/questions/56617971
复制