Search
Описание и параметры
void CSearch::Search( array arParams, array aSort = array(), array aParamsEx = array(), bool bTagsCloud = false );
Метод инициализирует выборку данных. Нестатический метод.
Перед выполнением поисковых запросов вызывается событие OnSearch.
Параметры метода
Параметр | Описание | С версии |
---|---|---|
arParams | Массив, содержащий условия поиска в виде наборов "название поля"=>"значение".
Название поля может принимать значение:
| |
aSort | Массив, содержащий признак сортировки в виде наборов "название поля"=>"направление".
Название поля может принимать значение:
array("CUSTOM_RANK"=>"DESC", "RANK"=>"DESC", "DATE_CHANGE"=>"DESC")В случае когда параметр bTagsCloud равен true, допустимыми полями являются:
| 4.0.10 |
aParamsEx | Массив массивов, содержащий дополнительные условия поиска в виде наборов "название поля"=>"значение". Эти условия будут объединены по условию ИЛИ. Смотри описание параметра arParams.
Так же может содержать элемент:
array( array( "MODULE_ID" => "forum", "PARAM1" => array(1, 2), ), array( "MODULE_ID" => "iblock", "PARAM2" => 3, ), )В данном случае поиск будет осуществляться в форумах с идентификаторами 1 и 2, а также в инфоблоке с идентификатором 3. | 4.0.10 |
bTagsCloud | Признак построения облака тегов. Если задан и равен true, то будет построено облако тегов. | 6.5.0 |
Расширение фильтров
С версии модуля 7.1.2 в параметрах arParams и arParamsEx появилась возможность использовать модификаторы ключей и сложную логику фильтров.Ключи поддерживающие модификаторы:
- MODULE_ID
- ITEM_ID
- PARAM1
- PARAM2
- SITE_ID
- DATE_CHANGE
- DATE_FROM
- DATE_TO
- SITE_URL
Модификаторы:
Модификатор | Пример | Описание |
= | "=MODULE_ID" => "iblock" | Выборка точного соответствия |
% | "%ITEM_ID" => "my" | Регистронезависимый поиск по подстроке |
? | "?PARAM1" => "forum|iblock" | Использование в фильтре сложной логики |
>, <, >=, <= | ">=PARAM1" => "44" | Выборка с использованием оператора |
>< | "><PARAM2" => array(10, 20) | Выборка значений диапазона |
Модификатор может предваряться символом "!", тогда условие будет отрицительным. Если присутствует ключ "LOGIC" и он имеет значение "OR", то условия объединяются логическим ИЛИ. Так же массивы ключей могут иметь вложенность.
Пример сложного фильтра:
//Поиск только среди элементов инфоблоков за исключением разделов и инфоблоков с ID 3, 5 и 7 и сообщений форума не старше одних суток. array( "LOGIC" => "OR", array( "=MODULE_ID" => "iblock", "!ITEM_ID" => "S%", "!=PARAM2" => array(3,5,7), ), array( "=MODULE_ID" => "forum", ">=DATE_CHANGE" => ConvertTimeStamp(time()-24*60*60, "FULL"), ) )
Возвращаемое значение
Ничего не возвращает.
Array( [ID] => Код индекса [DATE_CHANGE] => Дата изменения проиндексированного элемента [MODULE_ID] => Модуль, которому принадлежит проиндексированный элемент [ITEM_ID] => Код проиндексированного элемента [LID] => Языковое зеркало (язык) сайта [URL] => Адрес относительно корня сайта, по которому доступен данный элемент (с заменой специальных символов <, >, " на <, >, ") [TITLE] => Заголовок проиндексированного элемента (с заменой спец. символов) [SEARCHABLE_CONTENT] => Индекс элемента, по которому идет поиск (с заменой спец. символов) [PARAM1] => Первый параметр элемента [PARAM2] => Второй параметр элемента [~URL] => Адрес относительно корня сайта, по которому доступен данный элемент [~TITLE] => Заголовок проиндексированного элемента [~SEARCHABLE_CONTENT] => Индекс элемента, по которому идет поиск [TITLE_FORMATED] => Заголовок проиндексированного элемента с выделением искомых слов [BODY_FORMATED] => Часть текста проиндексированного элемента с выделением искомых слов [BODY_FORMATED_TYPE] => Идентификатор формата текста [URL_WO_PARAMS] => Адрес элемента без параметров добавленных в обработчиках события OnSearch. )
Если задано построение облака тегов, то:
Array( [NAME] => тег [CNT] => частота [DATE_CHANGE] => Максимальная дата изменения элемента имеющего данный тег [FULL_DATE_CHANGE] => Дата изменения элемента включая время. )
Примеры использования
Пример №1: поиск в форумах текущего сайта указанной строки:
<? $q = "жареная рыба или селедка"; $module_id = "forum"; $obSearch = new CSearch; $obSearch->Search(array( "QUERY" => $q, "SITE_ID" => LANG, "MODULE_ID" => $module_id, )); if ($obSearch->errorno!=0): ?> <font class="text">В поисковой фразе обнаружена ошибка:</font> <?echo ShowError($obSearch->error);?> <font class="text">Исправьте поисковую фразу и повторите поиск.</font> <? else: while($arResult = $obSearch->GetNext()) {?> <a href="<?echo $arResult["URL"]?>"><?echo $arResult["TITLE_FORMATED"]?></a> <?echo $arResult["BODY_FORMATED"]?> <hr size="1" color="#DFDFDF"> <?} endif; ?>
Пример №2: чтобы при обращении к модулю поиска поисковая фраза проиндексировалась в статистике Поиска, нужно обязательно вызвать NavStart():
$obSearch = new CSearch; $obSearch->Search(array( 'QUERY' => $_REQUEST['q'], 'SITE_ID' => LANG, 'MODULE_ID' => 'iblock', )); $obSearch->NavStart(); while ($arSearch = $obSearch->Fetch()) { echo($arSearch); }
Примечание: такой вызов NavStart() породит дополнительный PAGEN_. Если он мешает, то можно заменить NavStart на такую конструкцию:
$obSearch->Statistic = new CSearchStatistic($obSearch->strQueryText, $obSearch->strTagsText); $obSearch->Statistic->PhraseStat($obSearch->NavRecordCount, $obSearch->NavPageNomer);
© «Битрикс», 2001-2024, «1С-Битрикс», 2024