Проблемы производительности евклидовых дистанционных запросов postgres cube - PullRequest
1 голос
/ 16 июня 2019

У меня есть база данных postgres, содержащая таблицу документов с вложениями слов 100 измерений и использующая ее для поиска похожих документов.

CREATE TABLE documents(
   id bigint,
   title text,
   body text,
   vector double[],
   PRIMARY KEY(id)
);

Я установил расширение cube и использую его для сортировки документовтаким образом, по подобию выбранного документа (как объяснено здесь ):

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));

Я получаю результаты, как и ожидалось, но время запроса неоправданно велико ~ 30-45 секунд для таблицы размером ~ 2 миллиона строк.Как повысить производительность, чтобы снизить ее до приемлемых уровней, т. Е. <1 с на миллионах строк? </p>

...