×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.5.11. Типы для текстового поиска

2.5.11.1. tsvector
2.5.11.2. tsquery

Digital Q.DataBase предоставляет два типа данных, предназначенных для поддержки полнотекстового поиска, под которым понимается процесс поиска в коллекции документов на естественном языке документы с целью нахождения тех, которые лучше всего соответствуют параметру запрос. Данный tsvector тип представляет собой документ в форме, оптимизированной для текстового поиска; tsquery Тип аналогичным образом представляет текстовый запрос. Глава 2.9 Содержит подробное описание данного механизма, а также Раздел 2.6.13 содержит сводную информацию о соответствующих функциях и операторах.

2.5.11.1. tsvector #

Значение tsvector представляет собой отсортированный список уникальных лексем, представляющих собой слова, прошедшие процесс нормализации для объединения различных вариантов одного и того же слова (подробнее см. Глава 2.9 ). Сортировка и удаление дубликатов производятся автоматически при вводе, как показано в данном примере:

SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;
                      tsvector
----------------------------------------------------
 'a' 'and' 'ate' 'cat' 'fat' 'mat' 'on' 'rat' 'sat'

Для представления лексем, содержащих пробелы или знаки препинания, их необходимо заключать в кавычки:

SELECT $$the lexeme '    ' contains spaces$$::tsvector;
                 tsvector
-------------------------------------------
 '    ' 'contains' 'lexeme' 'spaces' 'the'

(В этом и следующем примерах используются строковые литералы с долларовыми разделителями, чтобы избежать путаницы при дублировании кавычек внутри литералов). Вложенные кавычки и обратные косые черты должны быть удвоены:

SELECT $$the lexeme 'Joe''s' contains a quote$$::tsvector;
                    tsvector
------------------------------------------------
 'Joe''s' 'a' 'contains' 'лексема' 'quote' 'the'

К лексемам могут быть дополнительно привязаны целочисленные позиции:

SELECT 'a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12'::tsvector;
                                  tsvector
-------------------------------------------------------------------​ ------------
 'a':1,6,10 'and':8 'ate':9 'cat':3 'fat':2,11 'mat':7 'on':5 'rat':12 'sat':4

Позиция обычно указывает на местоположение исходного слова в документе. Информация о позициях может использоваться для ранжирования с учётом близости. Значения позиций могут находиться в диапазоне от 1 до 16383; значения большего размера неявно устанавливаются равными 16383. Дублирующиеся позиции для одной и той же лексемы отбрасываются.

Лексемы, имеющие позиции, могут быть дополнительно помечены весом, который может принимать значения A, B, C, или D. D является значением по умолчанию и поэтому не отображается в выводе:

SELECT 'a:1A fat:2B,4C cat:5D'::tsvector;
          tsvector
----------------------------
 'a':1A 'cat':5 'fat':2B,4C

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

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

SELECT 'The Fat Rats'::tsvector;
      tsvector
--------------------
 'Fat' 'Rats' 'The'

Для большинства приложений полнотекстового поиска на английском языке приведенные выше слова будут считаться ненормализованными, но tsvector не имеет значения. Текст исходного документа обычно должен быть обработан функцией to_tsvector для соответствующей нормализации слов в целях поиска:

SELECT to_tsvector('english', 'The Fat Rats');
   to_tsvector
-----------------
 'fat':2 'rat':3

Опять же, см. Глава 2.9 для получения более подробной информации.

2.5.11.2. tsquery #

Значение tsquery значение хранит лексемы, по которым должен осуществляться поиск, и может объединять их с помощью логических операторов & (AND), | (OR) и ! (NOT), а также оператора поиска фраз <-> (FOLLOWED BY). Также существует вариант <N> оператора FOLLOWED BY, в котором N является целой константой, определяющей расстояние между двумя искомыми лексемами. <-> эквивалентно <1>.

Для принудительной группировки этих операторов могут использоваться скобки. При отсутствии скобок ! (NOT) имеет наивысший приоритет, <-> (FOLLOWED BY) — следующий приоритет, затем & (AND), с | (OR), имеющий самый низкий приоритет.

Примеры использования:

SELECT 'fat & rat'::tsquery;
    tsquery
---------------
 'fat' & 'rat'

SELECT 'fat & (rat | cat)'::tsquery;
          tsquery
---------------------------
 'fat' & ( 'rat' | 'cat' )

SELECT 'fat & rat & ! cat'::tsquery;
        tsquery
------------------------
 'fat' & 'rat' & !'cat'

При необходимости лексемы в tsquery могут быть помечены одной или несколькими весовыми литерами, что ограничивает область поиска только tsvector лексемами с соответствующими весами:

SELECT 'fat:ab & cat'::tsquery;
    tsquery
------------------
 'fat':AB & 'cat'

Также лексемы в tsquery могут быть помечены * для поиска по префиксу:

SELECT 'super:*'::tsquery;
  tsquery
-----------
 'super':*

Этот запрос будет соответствовать любому слову в tsvector которое начинается с «super».

Правила экранирования для лексем такие же, как были описаны ранее для лексем в tsvector; и, как и в случае с tsvector, любая необходимая нормализация слов должна быть выполнена перед преобразованием в тип tsquery . Тип to_tsquery функция удобна для выполнения такой нормализации:

SELECT to_tsquery('Fat:ab & Cats');
    to_tsquery
------------------
 'fat':AB & 'cat'

Обратите внимание, что to_tsquery будет обрабатывать префиксы так же, как и другие слова; это означает, что данное сравнение возвращает true:

SELECT to_tsvector( 'postgraduate' ) @@ to_tsquery( 'postgres:*' );
 ?column?
----------
 t

поскольку postgres преобразуется в основу postgr:

SELECT to_tsvector( 'postgraduate' ), to_tsquery( 'postgres:*' );
  to_tsvector  | to_tsquery
---------------+------------
 'postgradu':1 | 'postgr':*

который будет соответствовать основе слова postgraduate.

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

*поля обязательные к заполнению