TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #3035 1.86K
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение предыдущего поста)

Generalized Inverted Indexes (Обобщённые инвертированные индексы или GIN) — мощный инструмент СУБД, в частности, в Postgres.

Они отлично подходят для инвертирования типичного сценария использования индексов.

Вместо сопоставления «строка с ID 2 содержит значение „become a database expert“» вы переворачиваете это так: «токен „database“ сопоставляется со строками с ID 1, 2 и 3, а токен „expert“ — со строкой с ID 2».

Индексам GIN передаётся набор значений для каждой строки, которую вы хотите проиндексировать. Каждое уникальное значение становится ключом в индексе и сопоставляется с набором CTID (идентификаторов строковых кортежей), содержащих это значение.

У такого подхода есть несколько вариантов применения, один из которых — полнотекстовый поиск! В MySQL есть специальный тип индекса FULLTEXT, тогда как в Postgres для создания аналогичной функциональности используются более универсальные индексы GIN. Как это сделать?

(а) Добавьте в таблицу столбец tsvector:
CREATE TABLE post (
author TEXT,
publish_date DATE,
content TEXT NOT NULL,
search_vector tsvector);


(б) Заполните его лексемами (нормализованными словами):
UPDATE post
SET search_vector =
to_tsvector('english', content);


(в) Создайте индекс, используя лексемы в качестве ключей:
CREATE INDEX post_search_idx
ON post USING GIN(search_vector);


(г) Выполняйте запросы!
SELECT * FROM post
WHERE search_vector @@
to_tsquery('english', 'database & expert');
Telegram METANIT.COM Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN) (продолжение в следующем посте)
  • 👍 6
  • 👏 3
  • ❤ 2
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
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 →