Функция CONTAINS

Функция CONTAINS выполняет поиск по индексу текстового поиска при помощи заданных вами в аргументе поиска критериев и возвращает значение, которое показывает, найдено ли совпадение.

Синтаксис функции

Чтение синтаксической диаграммыПропуск синтаксической диаграммыCONTAINS(имя-столбца,аргумент-поиска,строчная-константа1)
Прим.:
  • 1 строчная-константа должна соответствовать правилам для опций-аргумента-поиска.
опции-аргументов-поиска
Чтение синтаксической диаграммыПропуск синтаксической диаграммы1 QUERYLANGUAGE=локальRESULTLIMIT=значениеSYNONYM=OFFON
Прим.:
  • 1 Нельзя задавать несколько раз одно и то же условие.
Схема - SYSIBM.

Параметры функций

имя-столбца
Специфицированное или неспецифицированное имя столбца индекса текстового поиска, в котором будет выполняться поиск. Этот столбец должен существовать в таблице или производной таблице, указанной в операторе в условии FROM, а со столбцом таблицы или базовой таблицы этой производной таблицы должен быть связан индекс текстового поиска (SQLSTATE 38H12). Базовое выражение столбца должно представлять собой простую ссылку на столбец базовой таблицы: либо непосредственную, либо через вложенную производную таблицу.
аргумент-поиска
Выражение, возвращающее строчное значение (кроме типа большого объекта), которое содержит поисковые термины; не может быть строкой из пробелов или пустой строкой (SQLSTATE 42815). Строчное значение - результат выражения не может содержать больше 4096 байт (SQLSTATE 42815). Это значение должно быть преобразовано в Unicode перед его использованием для поиска по индексу текстового поиска. Максимальное число терминов в одном запросе не может превышать 1024 (SQLSTATE 38H10).
строчная-константа

Строчная константа, задающая опции аргумента поиска, которые действуют для этой функции.

В составе опций-аргумента-поиска можно задать следующие опции:

QUERYLANGUAGE=локаль
Задает локаль, которую механизм Текстовый поиск Db2 использует при выполнении текстового поиска в текстовом столбце Db2. Значение - любая поддерживаемая локаль. Если не задать QUERYLANGUAGE, значением по умолчанию будет локаль индекса текстового поиска. Если в индексе текстового поиска значение параметра LANGUAGE - AUTO, для QUERYLANGUAGE используется значение en_US.
RESULTLIMIT=значение

Если оптимизатор выбирает план, при котором, чтобы получить оценку, механизм поиска вызывается для каждой строки набора результатов, то опция RESULTLIMIT на производительность не влияет. Если же механизм поиска вызывается один раз для всего набора результатов, то RESULTLIMIT действует как условие FETCH FIRST.

При использовании нескольких текстовых поисков, в которых RESULTLIMIT задается в одном и том же запросе, использовать один и тот же аргумент-поиска. Если вы используете разные значения аргумента-поиска, можно не получить ожидаемых результатов.

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

SYNONYM = OFF | ON
Задает, следует ли использовать словарь синонимов, связанный с индексом текстового поиска. Значение по умолчанию - OFF. Чтобы использовать синонимы, добавьте словарь синонимов в индекс текстового поиска при помощи Инструментов синонимов.
ОТКЛЮЧЕН
Не использовать словарь синонимов
ON
Использовать словарь синонимов, связанный с индексом текстового поиска.

Результат выполнения этой функции - длинное целое (large integer). Если второй аргумент допускает пустые значения, результат также допускает пустые значения; если второй аргумент пуст, результатом будет пустое значение. Если третий аргумент пуст, результат будет тем же, как и в случае, когда третий аргумент не задан. CONTAINS возвращает целое число 1, если в документе есть совпадение с критериями, заданными в аргументе поиска. Иначе возвращается 0.

Функция CONTAINS - недетерминированная.

Прим.: Используя маркеры параметров как аргумент поиска в функциях текстового поиска, надо выполнить дополнительные действия. У маркеров параметров нет типа во время прекомпиляции в программах JDBC и ODBC, но аргумент поиска в функциях текстового поиска должен при анализе разрешаться в строчное значение. Поскольку неизвестный тип маркера параметра не может разрешаться в строчное значение (SQLCODE -418), надо явно отобразить маркер параметра в тип данных VARCHAR.

Примеры

  • Следующий запрос служит для поиска всех сотрудников, в резюме которых упоминается COBOL. В аргументе текстового поиска регистр символов не учитывается.
    	SELECT EMPNO 
     	FROM EMP_RESUME 
     	WHERE RESUME_FORMAT = 'ascii'
      	AND CONTAINS(RESUME, 'COBOL') = 1
  • В следующей программе C ищется точный термин ate в столбце COMMENT:
    	char search_arg[100]; /* входная переменная хоста */ 
    	... 
    	EXEC SQL DECLARE C3 CURSOR FOR 
    		SELECT CUSTKEY 
     	FROM CUSTOMERS 
     	WHERE CONTAINS(COMMENT, :search_arg)= 1
      	ORDER BY CUSTKEY; 
     	strcpy(search_arg, "ate");
     	EXEC SQL OPEN C3; 
    		...
  • Следующий запрос служит для поиска любых 10 студентов, написавших интерактивные рефераты, которые содержат словосочетание горючие полезные ископаемые на испанском языке, то есть combustible fósil. Для соответствующего индекса текстового поиска был создан словарь синонимов. Поскольку требуется только 10 студентов, запрос оптимизируется при помощи опции RESULTLIMIT, чтобы ограничить число результатов с базового сервера текстового поиска.
    	SELECT FIRSTNME, LASTNAME 
     	FROM STUDENT_ESSAYS 
     	WHERE CONTAINS(TERM_PAPER, 'combustible fósil', 
      	'QUERYLANGUAGE= es_ES RESULTLIMIT = 10 SYNONYM=ON') = 1