Функция CONTAINS
Функция CONTAINS выполняет поиск по индексу текстового поиска при помощи заданных вами в аргументе поиска критериев и возвращает значение, которое показывает, найдено ли совпадение.
Синтаксис функции
Схема - 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 - недетерминированная.
Примеры
- Следующий запрос служит для поиска всех сотрудников, в резюме которых упоминается 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
