Онлайн-руководство разработчика NetCat
Новогодние скидки до 25%!
Подробнее
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Поиск и выборка

В системе компонентов реализована встроенная система поиска и выборки. Поиск можно производить по любым полям. Так, по текстовым и строковым (а также файловым – т.к. в базе данных хранится URL файла) полям производится поиск подстроки (без морфологии), по числовым – по диапазону значений, по логическим – да/нет, по спискам (классификаторам) – по конкретному значению.

Прежде всего, выборку можно осуществлять только по тем полям компонента, у которых установлен атрибут «возможен поиск по данному полю». При включении данной опции, поле будет участвовать в поиске по компоненту, а также в базе данных для данного поля будет создан индекс. При выключении опции индекс также будет удалён.

Каждому из таких полей соответствует элемент (или два элемента) массива srchPat[], значения которого нужно подавать на страницу, чтобы произвести выборку. Для того чтобы лучше понять принцип работы механизмов выборки, приведём примерный алгоритм осуществления поиска:

  • выбираем все поля, у которых установлено свойство «Искать по этому полю»;
  • сортируем их по возрастанию приоритета;
  • с каждым из них ассоциируем элемент массива srchPat[] по порядку, начиная с нуля; если тип поля – Int или Float, ассоциируем два элемента массива;
  • для каждого поля с включенным поиском проверяем соответствующий элемент массива srchPat[], поданный на скрипт;
  • если элемент не пустой – осуществляем выборку.

Приведём примеры набора полей и соответствия им элементов srchPat[].

Из 20 полей включены для поиска пять, соответственно каждое поле по порядку будет увеличивать число в srchPat[х],

на 1 строка или текст, на 2 число(целое или дробное) и мультилист, на 12 поле даты.

Приоритет Поле / Название поля Тип поля Элементы Параметры
1 Имя / Name Строка srchPat[0] Подаётся искомая подстрока
5 Возраст / Age Целое число srchPat[1], srchPat[2] Подаётся начало (1) и конец (2) диапазона поиска. Если один из параметров пуст, соответствующей границы диапазона нет.
6 Отдел / Depart Список srchPat[3] Подаётся номер записи классификатора. Если
18 Пол мужской? / IsMale Логическая переменная srchPat[4] Подается единица («да») или ноль («нет»).
19 Дата регистрации Дата srchPat[5]
srchPat[6]
srchPat[7]
srchPat[8]
srchPat[9]
srchPat[10]
srchPat[11]
srchPat[12]
srchPat[13]
srchPat[14]
srchPat[15]
srchPat[16]
Передаются числа для начала и конца диапазона, могут быть пустыми, но должно быть передано 12 параметров.
$date_from['d']
$date_from['m']
$date_from['Y']
$date_from['H']
$date_from['i']
$date_from['s']
$date_to['d']
$date_to['m']
$date_to['Y']
$date_to['H']
$date_to['i']
$date_to['s']

Если любой из параметров оказывается пустым, поиск по нему не производится.

Например, для вывода всех людей с именем «Дмитрий» от 20 до 30 лет необходимо подать на страницу параметры:

<a href="http://site.name/page_url/?srchPat[0]=Дмитрий&srchPat[1]=20&srchPat[2]=30">Все Дмитрии</a>

Полю «Множественный выбор» соответствует два элемента массива srchPat[]

Первый элемент — это массив всех искомых элементов( либо строка с элементами, разделенными дефисом), второй — тип поиска.

Для этого типа поля существует три типа поиска:

  • Неполное совпадение (по умолчанию) - выберутся только те объекты, содержащие все искомые элементы, причем объекты так же могут содержать и другие элементы. Элемент массива srchPat в этом случае равен 0
  • Полное совпадение - выберутся объекты содержащие только искомые элементы. Элемент массива srchPat в этом случае равен 1
  • Частичное совпадение (хотя бы один) - выберутся объекты, содержащие хотя бы один их искомых элементов. Элемент массива srchPat в этом случае равен 2

Для наглядности рассмотрим пример: пусть имеются четыре объекта: cites1, cites2, cites3, cites4 компонента, содержащего поле «Множественный выбор» формата Region (города). Для простоты, будем считать, что только по этому полю возможен поиск.

Содержание объектов:

cites1 : 1.Москва, 59.Екатеринбург, 110.Магадан
cites2 : 1.Москва, 84.Керчь, 110.Магадан
cites3 : 1.Москва, 93. Ковров
cites4 : 216. Челябинск, 110.Магадан

При типе поиска «Неполное совпадение» и искомых элементов «Москва», «Магадан» выберутся объекты cites1 и cites2.

В этом случае srchPat[0][]=1&srchPat[0][]=110&srchPat[1]=0, что аналогично srchPat[0][0]=1&srchPat[0][1]=110&srchPat[1]=0 или srchPat[0]=1-110&srchPat[1]=0

При типе поиска «Полное совпадение» искомых элементов «Москва», «Магадан» ничего не найдется, а если искомые элементами будут «Москва», «Ковров», то найдется только объект cites3.

Здесь srchPat[0][]=1&srchPat[0][]=93&srchPat[1]=1

При типе поиска «Хотя бы один»и при искомом элементе «Москва» найдутся cites1, cites2, cites3;

при искомых элементах «Москва», «Магадан» выберутся все объекты.

В форме поиска по умолчанию используется первый тип поиска, тип поиска в этом случае передается через скрытое поле:

<input type='hidden' name='srchPat[x]' value='0'>

Если вы используете свою форму поиска, то можете сами выбрать тип поиска и тоже передать его через скрытое поле, например:

<input type='hidden' name='srchPat[х]' value='2'>

Возможен вариант, когда пользователь сам может выбрать тип поиска, для этого в форму поиска вставьте:

<input type='radio' name='srchPat[x]' value='0'> Неполное совпадение
<input type='radio' name='srchPat[x]' value='1'> Полное совпадение
<input type='radio' name='srchPat[x]' value='2'> Хотя бы один из выбранных

По умолчанию поиск ведется в режиме И, тоесть должны быть выполнены все переданные условия.
Можно переключить выборку в режим ИЛИ, чтобы достаточно было выполнения хотябы одного из условий, для этого нужно передать 'srchPat[OR]' со значением '1'

Эти параметры можно также подавать в функции nc_objects_list() (третьим параметром). Кроме того, их можно использовать в форме фильтра (например, в префиксе списка объектов компонента).

Описание проекта