Введение
Тип индекса базы данных
В информатике инвертированный индекс (также называемый списком соответствий, файлом соответствий или инвертированным файлом) — это индекс базы данных, хранящий соответствие между содержимым, таким как слова или числа, и его местоположениями в таблице, документе или наборе документов (в отличие от прямого индекса, который отображает документы в содержимое). Цель инвертированного индекса — обеспечить быстрый полнотекстовый поиск, но при этом требуется дополнительная обработка при добавлении документа в базу данных. Инвертированный файл может являться самим файлом базы данных, а не только её индексом. Это наиболее распространенная структура данных, используемая в системах поиска документов, широко применяемая, например, в поисковых системах. Кроме того, несколько значительных универсальных систем управления базами данных, работающих на основе мейнфреймов, использовали архитектуры инвертированных списков, включая ADABAS, DATACOM/DB и Model 204. Существуют два основных варианта инвертированных индексов: инвертированный индекс уровня записей (или инвертированный индекс файла, или просто инвертированный файл) содержит список ссылок на документы для каждого слова. Инвертированный индекс уровня слов (или полный инвертированный индекс, или инвертированный список) дополнительно содержит позиции каждого слова внутри документа. Последний вариант предоставляет больше функциональности (например, поиск фраз), но требует больше вычислительных ресурсов и места для создания.
In computer science, an inverted index (also referred to as a postings list, postings file, or inverted file) is a database index storing a mapping from content, such as words or numbers, to its locations in a table, or in a document or a set of documents (named in contrast to a forward index, which maps from documents to content). The purpose of an inverted index is to allow fast full text searches, at a cost of increased processing when a document is added to the database. The inverted file may be the database file itself, rather than its index. It is the most popular data structure used in document retrieval systems, used on a large scale for example in search engines. Additionally, several significant general purpose mainframe based database management systems have used inverted list architectures, including ADABAS, DATACOM/DB, and Model 204. There are two main variants of inverted indexes: A record level inverted index (or inverted file index or just inverted file) contains a list of references to documents for each word. A word level inverted index (or full inverted index or inverted list) additionally contains the positions of each word within a document. The latter form offers more functionality (like phrase searches), but needs more processing power and space to be created.
Приложения
Инвертированная структура данных индекса является центральным компонентом типичного алгоритма индексации поисковой системы. Целью реализации поисковой системы является оптимизация скорости запроса: найти документы, содержащие слово X. После разработки прямого индекса, который хранит списки слов для каждого документа, он инвертируется для создания инвертированного индекса. Запрос к прямому индексу потребовал бы последовательной итерации по каждому документу и каждому слову для проверки соответствия. Время, память и вычислительные ресурсы, необходимые для выполнения такого запроса, не всегда технически осуществимы. Вместо перечисления слов для каждого документа в прямом индексе, разрабатывается инвертированная структура данных индекса, которая перечисляет документы для каждого слова. С созданным инвертированным индексом запрос может быть выполнен путем перехода к идентификатору слова (через произвольный доступ) в инвертированном индексе. В докомпьютерную эпоху конкордансы к важным книгам составлялись вручную. По сути, это были инвертированные индексы с небольшим количеством сопроводительных комментариев, создание которых требовало огромных усилий. В биоинформатике инвертированные индексы играют важную роль в сборке последовательности коротких фрагментов секвенированной ДНК. Один из способов найти источник фрагмента — выполнить поиск по нему относительно референсной последовательности ДНК. Небольшое количество несовпадений (из-за различий между секвенированной ДНК и референсной ДНК или ошибок) можно учесть, разбив фрагмент на более мелкие подфрагменты — по крайней мере один подфрагмент, вероятно, совпадет с референсной последовательностью ДНК. Для сопоставления требуется построить инвертированный индекс всех подстрок определенной длины из референсной последовательности ДНК. Поскольку человеческая ДНК содержит более 3 миллиардов пар оснований, и нам необходимо хранить подстроку ДНК для каждого индекса и 32-битное целое число для самого индекса, объем хранилища для такого инвертированного индекса, вероятно, составит десятки гигабайт.
Сжатие
По историческим причинам сжатие инвертированных списков и битового изображения разрабатывались как отдельные направления исследований, и лишь позднее стало понятно, что они решают по сути одну и ту же задачу.