SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Как создать hash-индекс для типа вектор? (Функцию ему подавай...)
Как создать hash-индекс для типа вектор? [сообщение #5774] Thu, 28 November 2024 12:52 Переход к следующему сообщению
DaniilGray в настоящее время не в онлайне  DaniilGray
Сообщений: 19
Зарегистрирован: October 2024
Junior Member
Есть у меня в СУБД Postgres тип vector (он же pgvector).
Для этого типа строятся только индексы типа hnsw. Ну, построили. Но при попытке найти в таблице ближайших соседей указанного вектора - индекс не используется, и происходит последовательное чтение таблицы, а индекс игнорится.  В этих наших интернетах прочёл, что это для hnsw нормально.

Пробовал построить индекс типа IVVFLAT - процесс вылетел в процессе с жалобой на нехватку памяти. При том, что число строк всего около 120 тысяч.

Старый добрый B-tree не строится - длина поля ему слишком большая.

Ладно, думаю, построю HASH-индекс.
И тут подстава - не понятно Postgres, какую же ему функцию использовать для вычисления хэша вектора.

Вот и вопросы:
1) какую функцию ему подсовывать для вычисления хэша по вектору?
2) где её брать?
3) как её подсунуть Postgres?
4) как Postgres объяснить, что именно эту функцию надо брать при создании индекса по векторам?
5) и есть ли смысл так заморачиваться? Будет ли этот индекс использоваться?

[Обновления: Thu, 28 November 2024 13:02]

Известить модератора

Re: Как создать hash-индекс для типа вектор? [сообщение #5775 является ответом на сообщение #5774] Thu, 28 November 2024 15:01 Переход к предыдущему сообщениюПереход к следующему сообщению
DaniilGray в настоящее время не в онлайне  DaniilGray
Сообщений: 19
Зарегистрирован: October 2024
Junior Member
Покопался.
В общем, нету в исходниках класса операторов для работы с hash (а заодно с GIN и GIST), так что можно забыть про hash-индексы.
Re: Как создать hash-индекс для типа вектор? [сообщение #5777 является ответом на сообщение #5775] Thu, 28 November 2024 15:09 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
Speed up PostgreSQL® pgvector queries with indexes

Вот это, пожалуй, все, что можно получить через индексы от pgvector.
Re: Как создать hash-индекс для типа вектор? [сообщение #5779 является ответом на сообщение #5777] Thu, 28 November 2024 17:42 Переход к предыдущему сообщению
DaniilGray в настоящее время не в онлайне  DaniilGray
Сообщений: 19
Зарегистрирован: October 2024
Junior Member
А от hnsw вообще ничего хорошего нельзя получить.

https://stackoverflow.com/questions/77757239/select-query-no t-using-pgvector-hnsw-index

"Попробуйте использовать order by и Limit", ага... Использую их, но индекс всё равно не используется.

P.S. Особенно радуют в статьях про hnsw-индексы советы в духе "пожалуйста, проверьте, что индекс действительно создался". Это что вообще такое???

[Обновления: Thu, 28 November 2024 17:45]

Известить модератора

Предыдущая тема: The Internals of PostgreSQL
Следующая тема: Ошибка кода
Переход к форуму:
  


Текущее время: Sun Dec 22 09:40:05 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00621 секунд