Поиск. Как в 1С-Битрикс в модуле bitrix.search.title искать по 2 подстрокам?

Модуль bitrix.search.title предоставляет функционал полнотекстового поиска с использованием метода CSearchTitle::GetList(), поддерживающего гибкую фильтрацию через параметр FILTER. Для реализации поиска по двум подстрокам в одном запросе необходимо сконфигурировать составной фильтр с применением логического оператора OR.

Алгоритм реализации:

  1. Формирование схемы фильтра Создается ассоциативный массив $filter, содержащий:

    • Ключ "LOGIC" со значением "OR" для объединения условий

    • Вложенные массивы с условиями фильтрации по полю "TAGS"

    • $filter = [
       "LOGIC" => "OR",
       ["TAGS" => "подстрока1"],
       ["TAGS" => "подстрока2"]
      ];
  2. Определение полей выборки Массив $arSelect задает список возвращаемых полей документа:

    $arSelect = ['URL', 'TITLE', 'BODY', 'TAGS'];
  3. Инициализация поискового запроса Вызов CSearchTitle::GetList() с параметрами:

    • Порядок сортировки (DATE_CHANGE => "DESC" - по убыванию даты модификации)

    • Сконфигурированный фильтр

    • Флаг отключения постраничной навигации (false)

    • Лимит элементов на странице (false - без ограничений)

    • Список запрашиваемых полей

      $rsResult = CSearchTitle::GetList(
       ["DATE_CHANGE" => "DESC"],
       $filter,
       false,
       false,
       $arSelect
      );
  4. Обработка результирующего набора Объект CDBResult позволяет последовательно извлекать записи через метод Fetch():

    while ($arItem = $rsResult->Fetch()) {
       // $arItem содержит ассоциативный массив 
       // с данными документа согласно $arSelect
    }

Код целиком

$filter = [
    "LOGIC" => "OR",
    ["TAGS" => "подстрока1"],
    ["TAGS" => "подстрока2"]
];

$arSelect = ['URL', 'TITLE', 'BODY', 'TAGS']; // Список полей, которые хотим получить в результате

$rsResult = CSearchTitle::GetList(
    ["DATE_CHANGE" => "DESC"], // Сортировка результатов по дате изменения страницы
    $filter, // Фильтр по подстрокам
    false, // Необходимо ли использовать постраничную навигацию
    false, // Количество записей на одной странице
    $arSelect // Список полей, которые хотим получить в результате
);

while ($arItem = $rsResult->Fetch()) {
    // $arItem содержит ассоциативный массив 
    // с данными документа согласно $arSelect
}

Особенности реализации:

  • Фильтр поддерживает сложные логические конструкции с комбинацией AND/OR

  • Метод Fetch() возвращает false при завершении итерации

  • Производительность запроса зависит от настроек поискового индекса и объема данных

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