TGViewer
Daria’s room Daria’s room @dariasroom · 1.2K subscribers
Post #121 1.93K
HNSW: как устроен графовый индекс для векторного поиска

One million years later, я наконец добралась до прикручивания в проект семантического поиска.

Тащить ради этого отдельную векторную бд максимально не хотелось, поэтому решила пойти классическим путем - попробовать встроить индекс HNSW прямо в движок наравне с остальными индексами.

Если кратко, HNSW - это графовый индекс для approximate nearest neighbor поиска по векторам. Вместо того чтобы сравнивать запрос со всеми векторами в индексе, HNSW заранее связывает близкие векторы в многоуровневый граф, а во время поиска двигается по этим связям в сторону все более похожих кандидатов.

Как обычно, решила разобраться, как HNSW вообще работает:

1. зачем графу несколько уровней;

2. как выбирается entry point;

3. почему сверху greedy поиск, который расширяется на ниженем уровне;

4. что делают параметры M, efSearch и efConstruction;

5. почему при построении нельзя просто соединить ноду с M ближайшими;

6. и как работают reverse links и pruning.


В итоге текста получилось на статью :") Пока без реализации и бенчмарков, а просто разбор внутрянки индекса.

Старалась написать максимально подробно и понятно, читать тут: https://gist.github.com/dariasmyr/d492c3388feaf0f779571a635a3b493e

В следующих сериях напишу, каким blazing fast оказался наш HNSW

#fts #projects
  • 🔥 13
  • ❤ 5
  • 👏 2
More from @dariasroom
  1. Sep 15, 2026Автоматическое сжатие на клиенте vs ручное на сервере Стандартный клиент http.Transport са…
  2. Sep 5, 2026Причина перекосов в уровне балансировки L4-балансировщик выбирает серверную ноду при созда…
  3. Aug 28, 2026Итераторы… TL;DR: в iter.Seq итератор сам передаёт следующие элементы в код внутри range,…
  4. Aug 17, 2026Что на самом деле нужно сохранять при сериализации сложной структуры? TL;DR: Важно отделит…
  5. Aug 13, 2026Привет! Вас стало больше, так что пора наконец представиться 🙂 Я Даша, давно пишу на Go,…
  6. Aug 9, 2026Недавно @dmedovich добавил в движок flat inverted index под данные с высокой кардинальност…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →