WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

GiST ( Generalized Search Tree, Обобщенное поисковое дерево) - структура индекса, которая является обобщенной разновидностью R-tree и предоставляет стандартные методы навигации по дереву и его обновления (расщепление и удаление узлов). GiST представляет собой сбалансированное (по высоте) дерево, концевые узлы (листья) которого содержат пары (key, rid), где key - ключ, а rid - указатель на соответствующую запись на странице данных. Внутренние узлы содержат пары (p,ptr), где p - это некий предикат (используется как поисковый ключ), выполняющийся для *всех* наследных узлов, а ptr - указатель на другой узел в дереве. Для этого дерева определены базовые методы SEARCH, INSERT, DELETE, и интерфейс для написания пользовательских методов, которыми можно управлять работой этих (базовых) методов.

Метод SEARCH управляется функцией Consistent, возвращающая 'true', если узел удовлетворяет предикату, метод INSERT - функциями penalty, picksplit и union, которые позволяют оценить сложность операции вставки в узел, разделить узел при переполнении и перестроить дерево при необходимости, метод DELETE находит лист дерева, содержащий ключ, удаляет пару (key, rid) и, если нужно, с помощью функции union перестраивает родительские узлы[1].

GiST является прямым индексом, используемым полнотекстовым поиском СУБД PostgreSQL. Это означает, что для каждого вектора tsvector, описывающего все лексемы документа, создаётся сигнатура, описывающая, какие из лексем входят в данный tsvector. Принцип работы схож с битовыми индексами, однако есть и различия.

Продемонстрируем на примере: пусть лексеме w1 сопоставлена сигнатура 001000, лексеме w2 — 000010. Тогда документу, содержащему только лексемы w1 и w2, будет сопоставлена сигнатура 001010 (001000 | 000010). В отличие от битовых индексов, отображение лексем в сигнатуры не однозначно, то есть возможно существование лексемы w3 с сигнатурой 001000. Это позволяет значительно экономить на размере индекса, но требует вторичной проверки на полное совпадение лексем запроса и документа.

Стоит также обратить внимание, что в случае, если лексема запроса имеет сигнатуру, к примеру, 000001, то документ с сигнатурой 001010 однозначно её не содержит, несмотря на неоднозначность отображения лексем.

Преимущество GiST в его скорости создания и размере индекса в сравнении с GiN (в 3 раза), потому он предпочтительнее для динамически постоянно обновляемых данных. Для статических данных или которые редко обновляются предпочтительнее GiN индекс (он в 3 раза быстрее производит поиск)[2].

Примечания

  1. Написание расширений для PostgreSQL с использованием GiST. www.sai.msu.su. Проверено 13 ноября 2017.
  2. Marko Ćilimković. Experimenting With Indexes - How Important Are They? | Bamboo Lab. bamboolab.eu. Проверено 7 января 2018.

Источники

  1. Введение в полнотекстовый поиск в PostgreSQL. Архивировано 26 апреля 2012 года.
  2. Написание расширений для PostgreSQL с использованием GiST.

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии