Предикат полнотекстового поиска

Функция

Для выполнения полнотекстового поиска используется предикат полнотекстового поиска (расширение конструкции поискового оператора SELECT языка SQL).

Спецификация
< предикат полнотекстового поиска >::=
< имя столбца >::=
< идентификатор >
< модификатор >::=
SENSITIVE | PARTIALLY | AT_BEGIN | AT_END | FUZZY
< шаблон полнотекстового поиска >::=
< строковый литерал >
Синтаксические правила
  1. < Имя столбца > должно принадлежать столбцу, по которому построен фразовый индекс.

  2. Модификаторы (по умолчанию отсутствуют) перечисляются в любом порядке и разделяются пробелами.

Общие правила

В таблице 4 представлены значения модификаторов и их назначение.

Таблица 4. Модификаторы полнотекстового поиска
МодификаторНазначениеПредставление в шаблонеМестоположение в шаблонеПример
SENSITIVEЗадает чувствительный к регистру поиск#Перед словом#Word
PARTIALLYЗадает поиск документов, в которых обозначенный шаблон поиска может встречаться в любом месте слова*В начале и конце*WORD*
AT_BEGINЗадает поиск документов, в которых обозначенный шаблон поиска может встречаться только в начале слов*В концеWORD*
AT_ENDЗадает поиск документов, в которых обозначенный шаблон поиска может встречаться только в конце слов*В начале*WORD
FUZZYЗадает нечеткий поиск%Перед словом%WORD

Под «словом» понимается собственно слово, имя и значение атрибута.

При задании модификатора соответствующий специальный символ (см. столбец «Представление в шаблоне» в таблице 4) применяется ко всем словам шаблона полнотекстового поиска.

Если модификатор должен быть применен не ко всем словам искомого документа, следует использовать специальный символ (см. столбец «Представление в шаблоне» в таблице 4) для конкретных слов поискового запроса.

Примеры

а) поиск отдельных слов c учетом регистра букв

Конструкция

select id_doc from "ph" where text_doc contains '#БД #ЛИНТЕР';

эквивалентна

select id_doc from "ph" where text_doc contains sensitive 'БД ЛИНТЕР';

б) поиск без учета регистра (выдаются все документы с фразами «бд», «БД» «ЛИНТЕР», «Линтер» и т.п.)

select id_doc from "ph" where text_doc contains 'БД линтер';

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

в) следующий запрос выдаст, в частности, документы с ошибочной фразой «спецальная»:

select id_doc from "ph" where text_doc contains fuzzy 'специальная';

Ниже приведены примеры фраз, которые могут быть найдены и пропущены при полнотекстовом поиске и степень их близости, подсчитанная с помощью SQL-функций soundex() и difference().

Исходный документ Найденный документ soundex() difference()
Спецальная  С167 0
Специальноя  С167 0
Спициальная  С167 0
Специалная  С167 0
Sпециалная S167 1  
Тпециалноя T167 1  
Специа С160 1  
Специальнаяя  С167 0