Как индекс GIN обрабатывает tsquery с & и |? - PullRequest
1 голос
/ 27 мая 2020

Когда я читаю документ, я просто вижу функцию «extractValue», но не знаю, как она работает.

Когда я передаю такой запрос, как

Select * 
from people 
WHERE people.belongings && to_tsquery('hat & (case | bag)')

( и у меня есть индекс джина на people.belongings)

будет ли этот запрос использовать индекс? что будет делать extractValue с этим запросом?

=======

и еще один вопрос, почему бы или почему не может индекс GisT индексировать объекты массива индивидуально как индекс GIN?

1 Ответ

0 голосов
/ 27 мая 2020

extractValue - это вспомогательная функция, которая используется при построении индекса, а не при его поиске. В случае полнотекстового поиска он получит tsvector и вернет содержащиеся в нем индексные ключи.

Функция поддержки, используемая для получения ключей в tsquery, будет extractQuery. Для полнотекстового поиска это будет gin_extract_tsquery. Он определен в src/backend/utils/adt/tsginidx.c, если вас интересует реализация. Что делает, так это преобразование tsquery во внутреннее представление, которое можно искать в индексе.

Фактическая проверка того, соответствует ли запись индекса поисковому выражению, выполняется gin_tsquery_consistent.

Функции поддержки описаны в документации .

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