Rose debug info
---------------

GIN индекс

GIN (Generalized Inverted Index) — инвертированный индекс, который позволяет реализовать что-то на подобии полнотекстового поиска. Активно используется в PostgreSQL.

Механизм работы индекса достаточно прост. Берем текст, разбиваем его на слова. Дальше эти слова добавляются в хеш-таблицу в качестве ключей, а в качестве значений массив с айдишниками записей, в которых встречается это слово.

Чтобы найти записи достаточно разбить поисковую строку на слова. Дальше для этих слов достать айдишники записей из хеш-таблицы и объединить их. В итоге получаем список найденных записей.

На в реальных системах этот индекс работает немного сложнее. В индексе хранятся не сами слова, а их лексемы. Они определяют основу слова, исключают разные языковые вариации и позволяют более широко искать слова в тексте.

Для создания лексем обычно есть словарь, который на вход принимает слово а результатом является лексема.

Вообще GIN индекс похожий на алфавитный указатель в конце книги, где для каждого термина приведен список страниц в которых этот термин упоминается.

Ниже небольшая реализация самого простого индекса на C#:

Поделиться
Отправить
Запинить