Готовые решения для 1С-Битрикс
Карточка решения
База знаний по решению:
Умный поиск с исправлением ошибок в запросе и подсказками
Часто задаваемые вопросы:

Все часто задаваемые вопросы по решению: Умный поиск с исправлением ошибок в запросе и подсказками

Содержание

Переиндексация данных

Видео-инструкция по переиндексации поиска:



Свои правила исправлений

Функционал "Свои правила исправления" позволяет создавать свои правила исправлений запросов пользователей. Это будет полезно когда автоматический алгоритм отрабатывает не так, как хотелось бы, нужно задать специфическое правило или приравнять два различных слова.

Свои правила исправлений дополняют автоматический механизм исправлений. Правила заданные вручную имеют больший приоритет и применяются до автоматических алгоритмов.

Решение применяет свои правила исправлений не только к поисковым запросам, но и к индексу сайта вцелом. Поэтому если вы приравниваете существующие на сайте слова (например прописываете синонимы) не забывайте делать полную переиндексацию поиска.

Видео-инструкция по добавлению своих правил исправлений:



Переадресация с поиска

Функционал "Правила переадресации с поиска" позволяет отправлять пользователей на нужные страницы сайта при введении определённых запросов.

Добавить правила переадресации можно в Настройках решения -> Вкладка Дополнительные возможности -> Переадресация со страницы поиска -> Редактировать

Формат записи правил:
ссылка||фраза1|фраза2|фраза* ...

Описание формата:
- первым в строке идёт ссылка на нужную страницу формата /catalog/section/ (без домена)
- разделитель || (две вертикальных черты)
- варианты запросов, при которых идёт переадресация, разделенные символом | (одна вертикальная черта)

Для вариантов запросов символом * (звёздочка) можно заменять окончание слова. В этом случае система будет видеть соответствие слова при любом окончании

Пример заполненного файла:

scr1a.png



Результатом работы данного примера будет:
1) При вводе запроса белье или носки будет отправлять в раздел /catalog/underwear/ (Нижнее бельё)
2) При вводе запросов майка или майки или майку будет отправлять в раздел /catalog/t-shirts/ (Футболки)


Сортировка результатов поиска

Сортировки поддерживаемые поиском

Поисковое ядро Битрикса поддерживает две сортировки:
- По дате
- По релевантности

Сортировка устанавливаемся непосредственно в параметрах компонентов поиска search.page и search.title

1. Сортировка по дате

Сортировка по дате это сортировка по дате последнего обновления элемента. Чем ближе дата обновления к текущей - тем выше элемент будет в результатах поиска.

Сортировка по дате имеет место быть, но применима достаточно редко - например на новостных сайтах.

2. Сортировка по релевантности (рекомендуемая)

Релевантность - ключевой механизм любого поискового механизма. Он определяет насколько найденный товар соотвествует запросу пользователя и наиболее релевантные выводит выше чем менее релевантные.

Фактически именно релевантность определяет качество поиска. Чем лучше релевантность поиска - тем удобнее и точнее кажется поиск, выше вероятность, что посетитель вашего сайта найдет нужный ему товар.
Важное дополнение:
В большинстве случаев для реализации страницы поиска используют связку компонентов search.page + catalog.section. При использовании такой связки сортировка отображаемых карточек товара настраивается в параметрах компонента catalog.section. В этом случае для сохранения порядка отображения карточек по дате или релевантности нужно передать порядок сортировки из компонента search.page в catalog.section. Это можно сделать указав в параметрах catalog.section:

"ELEMENT_SORT_FIELD" => "ID",
"ELEMENT_SORT_ORDER" => array_values($arElements),

Способ работает с модулем iblock версии выше 18.6.900

Правила сортировки (вес)

Правила сортировки это дополнительный функционал. Основной механизм релевантности работает без ручной настройки каких либо правил.

С помощью "Правил сортировки" задаём элементам "Вес". Вес элемента влияет на порядок элементов в поисковой выдаче:
  • Элемент с большим весом всегда считается более релевантным и отображаться выше в списке
  • Вес элемента сквозной - один вне зависимости от поискового запроса
  • После создания правил всегда делайте полную Переиндексацию, а не обновление поискового индекса со страницы правил сортировки

Правила сортировки в административной панели битрикса


Это стандартный функционал 1с-Битрикс. Описание процесса создания правил сортировки вы можете найти в официальной документации битрикс.
Внутренние механизмы решения так же используют работу с правилами сортировки, что бы правила решения не "перевешивали" правила созданные вручную, рекомендуется в правилах сортировки созданных вручную указывать вес начиная со 100000.
Примеры задач которые можно решить с использованием правил сортировки админ-панели:

Задача: Поиск производится по двум инфоблокам Каталог и Бренды. Необходимо в начале выводить найденные Бренды, а потом уже элементы каталога.
Решение: Задайте Брендам вес 101000 и обновите поисковый индекс. При любом запросе, под который попадают бренды они будут отображаться первыми.

Задача: На сайте есть важные товары которые при совпадении нужно показывать самыми первыми.
Решение: Задайте конкретным товарам больший вес, например 102000 и обновите поисковый индекс. При любом запросе, под который попадают эти товары они будут отображены первыми.

Два этих примера крайне просты, но на них хорошо видно механику работы правил сортировки.

Создание правила сортировки для раздела


В третьем параметре по умолчанию можно выбрать только товары. Но задать правило для раздела возможно - нужно вручную в 3 параметр вписать ID раздела с приставкой S. Важно! правило применится к элементу раздела (разделы так же могут участвовать в поиске как самостоятельные элементы), а не к его вложенным товарам.

Пример правила, задающего вес разделу с ID 9:



Программная работа с весом (для разработчиков)


Часто возникают ситуации, когда нужно работать с весом автоматизированно:
- Нужны сложные формулы расчёта веса
- Есть индивидуальные пожелания к сортировке на сайте

В этом случае можно работать с весом программно, через событие https://dev.1c-bitrix.ru/api_help/search/events/beforeindex.php

В событии мы работаем с ключем массива CUSTOM_RANK

AddEventHandler("search", "BeforeIndex", "onIndexWeightHandler", 510); function onIndexWeightHandler($arFields){ if($arFields["MODULE_ID"] == "iblock" && $arFields["TITLE"] && $arFields["ITEM_ID"]){ $arFields["CUSTOM_RANK"] = 0; } return $arFields; }

Чем большую цифру вы укажете в CUSTOM_RANK, тем выше элемент будет в результатах поиска. Этот вес сквозной - соответственно он записывается в индекс и будет действовать вне зависимости от поискового запроса.

Важно!
- Что бы данный способ работал, к элементу не должно применяться правил созданных в интерфейсе (Битрикс считает их более приоритетными).
- Вес сильнее релевантности решения, давая какому то элементу больший вес нужно понимать, что в этом случае элемент с повышенным весом будет в выдаче выше других элементов, даже если их релевантность запросу по мнению решения выше

Повышение веса определённым разделам

Начиная с версии 2.4.0 в решении появилась возможность дать повышенный вес определённым разделам. Это может быть очень полезно в случаях когда у вас есть более и менее приоритетные товары и вы хотите всегда выдавать первыми более приоритетные товары. Например "iPhone" и "Аксессуары для iPhone".
Решение берёт дополнительный вес товара из поля родительского раздела. Если товар привязан к нескольким разделам, решение будет смотреть дополнительный вес в разделе который битрикс считает основным.

Создание свойства с весом

Первым делом нужно создать свойство с весом в разделах (делается один раз)
Переходим в редактирование раздела, на вкладку "Доп. поля" и нажимаем "Добавить пользовательское свойство"

scr1.png

При создании указываем:
- Тип данных - целое число
- Код поля - UF_PROD_WEIGHT
- Название - Вес товаров

scr1.png

Сохраняем. После сохранения данное поле будет отображаться в редактировании раздела.

Заполнение поля с весом


После создания в редактировании будет отображаться поле с весом

scr1.png

Заполняем его целым числом. Это число "Добавочный вес" для товаров этого раздела. Чем больше вес, тем больше приоритет в выдаче у товаров.

После заполнения обязательно сделайте полную переиндексацию данных

Область поиска

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


Поиск по тегам

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

Пример настройки поиска по тегам


1. Для примера мы возьмём товар с названием "Штаны Полосатый рейс"

currency.jpg

2. Предположим, что мы хотим находить этот товар по словам "Брюки" и "Юбка". Для этого переходим в изменение товара, на стандартную вкладку "СЕО" и заполняем поле "Теги". Сохраняем товар

currency.jpg

3. Переходим на сайт и проверем работу интерактивного поиска:

currency.jpg currency.jpg


Все работает. Настройка очень проста и позволяет расширить поиск так, как Вы это видите!


Поиск по свойствам

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

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

С помощью решения можно находить элементы по значению их свойств (применимо и к интерактивному поиску и к странице поиска).

Как настроить поиск свойствам?


1. Включение индексации свойств в решении

Первым делом включаем индексацию свойств в решении. Для этого переходим в Настройки (в верхней части админки) -> Выбираем модуль "Умный поиск с исправлением ошибок и подсказками" в выпадающем списке -> Переходим на вкладку "Настройка поиска"

Устанавливаем галочку "Свойства участвуют в поиске".

2. Выбираем свойства по которым ищет поиск

Далее нужно сказать системе, по каким свойствам нужно искать. Для этого открываем настройки и инфоблока (Контент - Инфоблоки - Типы инфоблоков - Ваш тип - Ваш инфоблок) и переходим на вкладку свойства.

infoblock_properties.png


Находим нужное свойство, в нашем случае это материал и нажимаем кнопку изменить

scr2.png


В открывшемся окне устанавливаем галочку "

in_search.png


Сохраняем окно. Сохраняем настройки инфоблока.

3. Переиндексация

После любых изменений области поиска, нужно делать переиндексацию. Этот случай не исключение - делаем переиндексацию поиска

4. Всё готово. Если всё сделано корректно, поиск начнет искать по настроенным свойствам


Пример поиска по свойству


Для примера мы возьмём товар с названием "Спортивный Костюм Огонь в Ночи", у которого в свойстве "Материал" указан "Шелк / Дермантин"

tovar.png

Проведём описанные выше операции - отменим свойство на поиск, сделаем переиндексацию и т.п.

Проверим поиск введя значения свойства Материал:

test1.png test2.png


Находит, значит мы всё сделали корректно.


Поиск по статическим страницам

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



Что необходимо для поиска по статическим страницам:

1. В настройках компонентов поиска, в области поиска должен быть отмечен поиск по стратическим страницам

oblast-poiska.png


2. У статических страниц должен быть установлен заголовок функцией: $APPLICATION->SetTitle("Тестовый заголовок"); именно по содержимому этого заголовка и будет происходить поиск

3. Ваш шаблон компонента страницы поиска должен поддерживать вывод таких страниц (данная пометка в касается сайтов, где страница поиска ориентирована только на вывод товаров каталога в виде карточек)

Поиск по разделам инфоблоков

Решение поддерживает поиск по разделам инфоблоков.

Что бы решение осуществляло поиск по разделам нужно включить индексацию разделов настройках инфоблока:


И провести переиндексацию поиска.

----

Что делать если после действий выше разделы не находятся:

Поисковое ядро не имеет ограничения на поиск разделов. Чаще всего проблема с отображением разделов связана с отсутствием поддержки вывода найденных разделов на уровне сохраненных шаблонов.

1. Если у вас Аспро и интерактивный поиск не отображает разделы

Проверьте настройку шаблона Аспро "Скрывать отсутствующие товары в поиске в шапке". Она конфликтует с отображением разделов и её стоит убрать. При необходимости исключить из поиска товары не в наличии можно воспользоваться соответствующей настройкой в модуле умного поиска.

2. Если найденные разделы не отображаются на странице поиска

Чаще всего шаблон страницы поиска программируют так, что на нём отображаются только найденные товары (через связку search.page + catalog.section)

Если у вас интерактивный поиск находит разделы, а страница поиска нет - с очень большой вероятностью вывод разделов не заложен в шаблон страницы поиска.

3. Если описанные выше варианты не подходят по ваш случай - рекомендую писать в поддержку решения, изучу и скажу точно причину проблемы

Поиск по свойствам типа "Привязка к элементам"

По умолчанию Битрикс не поддерживает поиск по свойствам типов Привязка к элементу, поэтому галочки "Значения свойств участвуют в поиске" в них не отображаются.

С помощью решения можно искать по полям Привязка к элементу, для этого их нужно "заиндексировать" событием:

<? AddEventHandler("search", "BeforeIndex", "addPropertyLinkToSIndex", 50); function addPropertyLinkToSIndex($arFields){ if(CModule::IncludeModule("arturgolubev.smartsearch")){ $intIndexIblockId = 2; // вместо 2 указываем ID инфоблока которому принадлежат свойства $arIndexProperty = array(95); // вместо 95 указываем ID свойств, которые нужно проиндексировать, если их несколько - указываем через запятую - 95, 96, 97 $arFields = CArturgolubevSmartsearch::iblockLinkPropHandler($arFields, $intIndexIblockId, $arIndexProperty); } return $arFields; } ?>

После добавления события необходимо выполнить переиндексацию поиска.

В поисковый индекс будут добавляться названия элементов, индексируемых свойств.

Типовые вопросы

Результаты интерактивного поиска немного отличаются от страницы поиска

Периодически в техническую поддержку приходит вопрос: "Результаты интерактивного поиска отличаются от результатов на странице поиска. Что делать?"

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

Эти два инструмента поиска хоть и кажутся схожими, но работают по разным алгоритмам. Как следствие - возможные отличия результатов по некоторым специфичным запросам.

Но если необходимо, можно сделать результаты максимально похожими!

Как сделать результаты интерактивного поиска и страницы поиска максимально похожими:

  1. Включить расширенный режим работы поиска (в настройках решения)
  2. Отключить поиск по описаниям на поисковой странице (в настройках решения)
  3. Выключить морфологию в настройках модуля Поиск Битрикса
  4. Установить в обоих компонентах сортировку "По релевантности"

Страница поиска находит меньше товаров чем есть

Довольно часто в поддержку приходит вопрос:
"У нас на сайте 500 товаров содержащих в названии Кофе, а на странице поиска находится всего 200"
Проблема обычно заключается в настройках:

1. Ограничения на количество находимых товаров

Данное ограничение устанавливается в двух местах - в компоненте search.page и в настройках стандартного модуля "Поиск". На некоторых решениях из маркетплейса по умолчанию идёт цифра 200.

Я рекомендую в этих двух местах устанавливать одинаковую цифру, например 500. Не рекомендую устанавливать слишком большое количество запрашиваемых элементов (больше 2000), т.к. скорость работы страницы поиска снижается при больших количествах результатов.

module-search-maxcnt.png

module-search-maxcnt2.png




2. Отсечение товаров не в наличии

В некоторых решениях (например от аспро) есть возможность не выводить товары не в наличии на странице поиска. Такие ограничения обычно ставятся через настройки решения или же в шаблоне вывода страницы поиска.

Если у вас не находятся именно товары не в наличии проверьте нет ли отсечения товаров не в наличии

Поддержка sphinx

Довольно часто спрашивают - поддерживает ли решение работу со sphinx?

Ответ: да, есть поддержка sphinx с ограничениями в функционале. Если настроить sphinx, поиск и большая часть функционала будет работать.


Что улучшится?
  1. Скорость. Скорость работы поиска с использованием sphinx значительно выше. Особенно на больших объёмах данных (например если у вас более 30т товаров)

Что ухудшится?
  1. Поиск внутренних вхождений. sphinx не умеет искать вхождения не с начала строки, например не сможет найти артикул AS24540 по запросу 24540
  2. Релевантность - релевантность найденных товаров к запросу станет немного слабее

Как использовать sphinx при поиске?

Важно: установка и настройка sphinx на сервере не входит в стандартную техническую поддержку решения.
  1. Для работы необходима версия сфинкса совместимая с ядром битрикса (рекомендую использовать sphinx из сборки bitrixVM)
  2. В настройках модуля поиск выберите полнотекстовый поиск с помощью sphinx
  3. Сделайте полную переиндексацию

Как посмотреть статистику поиска

Решение умеет собирать статистику работы пользователей с поиском.

Сбор статистики осуществляется если у в настройках модуля поиск активен параметр "Собирать статистику по поисковым фразам"

module-search-maxcnt.png


Посмотреть статистику можно из настроек решения, выбрав соответствующую опцию в меню

module-search-maxcnt.png

Интеграция с популярными решениями

В данном подразделе буду публиковать подсказки по интеграции с популярными решениями Marketplace

Аспро: Некст, Максимум, Оптимус

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

Важно! Описанные ниже пути актуальны для случаев когда используется не кастомизированный шаблон решения. В случаях когда шаблон кастомизирован, он может находиться в /local/ и/или иметь другой id шаблона (вместо указанного ниже aspro_max). Если вам нужна подсказка по интеграции - пишите на почту поддержки решения, подскажу.

При установке поиска в Аспро: Некст / Максимум / Оптимус необходимо выполнить следующие действия:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/aspro_max/components/bitrix/search.page
в /bitrix/templates/aspro_max/components/arturgolubev/search.page

б) Копируем /bitrix/templates/aspro_max/components/bitrix/search.title
в /bitrix/templates/aspro_max/components/arturgolubev/search.title

в) Копируем /bitrix/templates/aspro_max/components/bitrix/catalog.search/main/bitrix/search.page
в /bitrix/templates/aspro_max/components/bitrix/catalog.search/main/arturgolubev/search.page


2. Меняем bitrix:search.title на arturgolubev:search.title в файлах

/include/footer/site-search.php /include/top_page/search.title.catalog.php /include/top_page/search.title.mobile.php /include/top_page/search.title.megamenu.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файлах

/bitrix/templates/aspro_max/components/bitrix/catalog.search/main/include_search_page.php /search/index.php

Digital Web: Deluxe

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.
В отличии от других решений, DW Deluxe использует свои компоненты для поиска, поэтому установка на deluxe более сложная, чем на другие решения.


0 Шаг. База


Устанавливам решение с маркета, настраиваем, делаем полную переиндексацию. По необходимости дейлайте бэкапы редактируемых файлов.

1 Шаг. Копирование компонентов


А. Копируем компоненты /bitrix/components/dresscode/search и /bitrix/components/dresscode/catalog.section в папку /bitrix/components/arturgolubev

Б. После копирования переименовываем /bitrix/components/arturgolubev/search в /bitrix/components/arturgolubev/dresscode.search, /bitrix/components/arturgolubev/catalog.section в /bitrix/components/arturgolubev/dresscode.catalog.section

После переименования в файле /bitrix/components/arturgolubev/dresscode.catalog.section/component.php меняем строку if (!preg_match('/^(asc|desc|nulls)(,asc|,desc|,nulls){0,1}$/i', $arParams["ELEMENT_SORT_ORDER"])) на if (!is_array($arParams["ELEMENT_SORT_ORDER"]) && !preg_match('/^(asc|desc|nulls)(,asc|,desc|,nulls){0,1}$/i', $arParams["ELEMENT_SORT_ORDER"]))

В. Скачиваем и загружаем шаблоны компонентов в папку /bitrix/templates/.default/components/arturgolubev


2 Шаг. Установка интерактивного поиска


Определяем где размещен интерактивный поиск. Обычно он лежит в одном из перечисленных ниже файлов

/sect_searchLine.php /sect_searchLine2.php /sect_searchLine3.php /sect_searchLine4.php


а. Если он размещен в sect_searchLine.php:

Вместо стандартного компонента dresscode:search.line вставляем компонент интерактивного поиска из файла (меняем целиком вместе с параметрами вызова).

б. Если он размещен в sect_searchLine2.php или sect_searchLine4.php:

Вместо стандартного компонента dresscode:search.line вставляем компонент интерактивного поиска из файла (меняем целиком вместе с параметрами вызова).

в. Если он размещен в sect_searchLine3.php:

Вместо стандартного компонента dresscode:search.line вставляем компонент интерактивного поиска из файла (меняем целиком вместе с параметрами вызова).


3 Шаг. Установка поисковой страницы


а. В файле /search/index.php меняем компонент dresscode:search на arturgolubev:dresscode.search (просто меняем область вызова компонента без изменения параметров)

б. В файле /bitrix/components/arturgolubev/dresscode.search/templates/.default/template.php сразу после $this->setFrameMode(false); вставляем код (файл с кодом скачиваем по ссылке)

dress_spage_huk.png

в. В этом же файле ищем вызов компонента dresscode:catalog.section и меняем на компонент arturgolubev:dresscode.catalog.section (просто меняем область вызова компонента без изменения параметров)

г. Перед вызовом данного компонента размещаем код if(!$arParams["ELEMENT_SORT_FIELD"] || $arParams["ELEMENT_SORT_FIELD"] == 'SHOWS'){ $arParams["ELEMENT_SORT_FIELD"] = 'ID'; $arParams["ELEMENT_SORT_ORDER"] = array_values($arIDS); }

Altop: Электросила, Электросила Next

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

При установке поиска в ALTOP ЭЛЕКТРОСИЛА необходимо заменить поиск в двух файлах:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog/.default/bitrix/search.page/ в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.page

б) Копируем /bitrix/components/altop/search.title/templates в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title

в) Копируем файл /bitrix/components/altop/search.title/script.js в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title/visual


2. Меняем altop:search.title на arturgolubev:search.title в файле

/include/header_search.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файле

/bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog/.default/bitrix/catalog.search/.default/template.php

#АЙДИ_ШАБЛОНА# - заменить на айди вашего шаблона

Некстайп: Магнит

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

При установке поиска в Некстайп: Магнит необходимо заменить поиск в трех файлах:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/search.page в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.page

б) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/search.title в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title


2. Меняем bitrix:search.title на arturgolubev:search.title в файле

/include/search_line.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файле

/bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog.search/main/template.php
(Путь выше указан до стандартного шаблона catalog.search, проверить какой шаблон catalog.search используется можно в файле /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog/main/search.php)

#АЙДИ_ШАБЛОНА# - заменить на айди вашего шаблона

Битроник 2

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

При установке поиска в решение Битроник 2 необходимо заменить поиск в двух файлах:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/search.page в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.page

б) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/search.title в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title


2. Меняем bitrix:search.title на arturgolubev:search.title в файле

/include_areas/header/search.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файле

/bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog/.default/search.php

#АЙДИ_ШАБЛОНА# - заменить на айди вашего шаблона

Intec Universe

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

Важно! Описанные ниже пути актуальны при использовании не кастомизированного шаблона решения. В случаях когда шаблон кастомизирован, он может находиться в /local/ и иметь отличный id шаблона. В инструкции ниже используется базовый id шаблона universe_s1. Если вам нужна подсказка по интеграции - пишите на почту поддержки решения, подскажу.

При установке поиска в решение Intec Universe (либо прочие решения от Intec) необходимо выполнить следующие действия:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/universe_s1/components/bitrix/search.page в /bitrix/templates/universe_s1/components/arturgolubev/search.page

б) Копируем /bitrix/templates/universe_s1/components/bitrix/search.title в /bitrix/templates/universe_s1/components/arturgolubev/search.title



2. Меняем bitrix:search.title на arturgolubev:search.title в файлах

/bitrix/templates/universe_s1/components/intec.universe/main.header/template.1/parts/search/input.1.php
/bitrix/templates/universe_s1/components/intec.universe/main.header/template.1/parts/search/popup.1.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файле

/bitrix/templates/universe_s1/components/bitrix/catalog/catalog.1/bitrix/catalog.search/.default/template.php

Концепт: Феникс

Решение Феникс использует свои разработки в части поиска, не совместимые в плане шаблонов со стандартными компонентами битрикса и с отличающейся концепцией. Заменить поиск даже без сохранения дизайна в данном решении крайне сложно.

Простого способа установить решение с сохранением дизайна нет. Только базовая установка и верстка шаблона, похожего на фениксовый, но по концепции поиска моего решения.

Некстайп: Альфа

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

Для установки умного поиска с сохранением дизайна в шаблон Некстайп: Альфа необходимо:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog.search/main/bitrix в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog.search/main/arturgolubev

б) Копируем /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/search.title в /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title


2. Меняем компонент в файлах скопированных шаблонов

Переходим в папку куда мы скопировали шаблоны search.title - /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/arturgolubev/search.title
Заходим в каждый шаблон, смотри там файл component.php, заменяем bitrix:search.title на arturgolubev:search.title
Меняется только область вызова компонента. Параметры не трогаем

3. Меняем компонент bitrix:search.title на arturgolubev:search.title в файлах

/include/search.php /include/header/search.php
Меняется только область вызова компонента. Параметры оставляем те же. Проверяем что бы в параметре ORDER было указано 'rank' (иначе выдача будет по дате обновления, а не релевантности)

4. Меняем компонент bitrix:search.page на arturgolubev:search.page в файле

/bitrix/templates/#АЙДИ_ШАБЛОНА#/components/bitrix/catalog.search/main/template.php
Меняется только область вызова компонента. Параметры оставляем те же.

(Путь выше указан до стандартного шаблона catalog.search, проверить какой шаблон catalog.search используется можно в файле /bitrix/templates/#АЙДИ_ШАБЛОНА#/components/nextype/alpha.catalog/main/search.php)

#АЙДИ_ШАБЛОНА# - заменить на айди вашего шаблона

Аспро: Лайтшоп

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

Важно! Описанные ниже пути актуальны для случаев когда используется не кастомизированный шаблон решения. В случаях когда шаблон кастомизирован, он может находиться в /local/ и/или иметь id отличный от aspro-lite. Если вам нужна подсказка по интеграции - пишите на почту поддержки решения, подскажу.

Для установки поиска в Аспро: Лайтшоп необходимо выполнить следующие действия:

1. Копируем текущие шаблоны поиска

а) Копируем шаблоны компонентов для пк версии лайтшопа

из /bitrix/templates/aspro-lite/components/bitrix/search.page
в /bitrix/templates/aspro-lite/components/arturgolubev/search.page

из /bitrix/templates/aspro-lite/components/bitrix/search.title
в /bitrix/templates/aspro-lite/components/arturgolubev/search.title

из /bitrix/templates/aspro-lite/components/bitrix/catalog.search/main/bitrix/search.page
в /bitrix/templates/aspro-lite/components/bitrix/catalog.search/main/arturgolubev/search.page

б) Копируем шаблоны компонентов для мобильной версии лайтшопа

из /bitrix/templates/aspro-lite-mobile/components/bitrix/search.page
в /bitrix/templates/aspro-lite-mobile/components/arturgolubev/search.page

из /bitrix/templates/aspro-lite-mobile/components/bitrix/search.title
в /bitrix/templates/aspro-lite-mobile/components/arturgolubev/search.title

из /bitrix/templates/aspro-lite-mobile/components/bitrix/catalog.search/main/bitrix/search.page
в /bitrix/templates/aspro-lite-mobile/components/bitrix/catalog.search/main/arturgolubev/search.page


2. Меняем bitrix:search.title на arturgolubev:search.title в файле

/include/header/search.title.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файлах

/bitrix/templates/aspro-lite/components/bitrix/catalog.search/main/include_search_page.php /bitrix/templates/aspro-lite-mobile/components/bitrix/catalog.search/main/include_search_page.php /search/index.php


ASTDESIGN: RAPID

Интеграция модуля поиска в шаблон RAPID с сохранением дизайна возможна, но крайне сложна. Пишите в поддержку решения, помогу с установкой

Сотбит: Оригами

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

При установке поиска в Сотбит Оригами необходимо заменить поиск в 2 файлах:

1. Копируем текущие шаблоны поиска

а) Копируем /bitrix/templates/.default/components/bitrix/search.page
в /bitrix/templates/.default/components/arturgolubev/search.page

б) Копируем /bitrix/templates/.default/components/bitrix/search.title
в /bitrix/templates/.default/components/arturgolubev/search.title


2. Меняем bitrix:search.title на arturgolubev:search.title в файле

/bitrix/templates/sotbit_origami/theme/headers/#АЙДИ_ТИПА_ХЕДЕРА#/content.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файл

/bitrix/templates/.default/components/bitrix/catalog/sotbit_origami_catalog/bitrix/catalog.search/origami_default/template.php

Аспро: Корпоративный сайт 2.0

Перед интеграцией ознакомьтесь с основной инструкцией по установке. В заметке ниже вы сможете найти более точные пути и инструкции для установки с сохранением дизайна вашего шаблона сайта.

Важно! Описанные ниже пути актуальны для случаев когда используется не кастомизированный шаблон решения. В случаях когда шаблон кастомизирован, он может находиться в /local/ и/или иметь id отличный от aspro-allcorp2. Если вам нужна подсказка по интеграции - пишите на почту поддержки решения, подскажу.

Для установки поиска в Аспро: Корпоративный сайт 2.0 необходимо выполнить следующие действия:

1. Копируем текущие шаблоны поиска

из /bitrix/templates/aspro-allcorp2/components/bitrix/search.page
в /bitrix/templates/aspro-allcorp2/components/arturgolubev/search.page

из /bitrix/templates/aspro-allcorp2/components/bitrix/search.title
в /bitrix/templates/aspro-allcorp2/components/arturgolubev/search.title


2. Меняем bitrix:search.title на arturgolubev:search.title в файлах

/include/header/search.title.php /include/footer/site-search.php

3. Меняем bitrix:search.page на arturgolubev:search.page в файлах

/search/index.php


События

Событие работы с запросом пользователя

С помощью события onBeforePrepareQuery вы можете работать с запросом пользователя, введенным в поиск, до срабатывания механизмов решения.

Пример обработчика, который можно доработать под вашу задачу:

AddEventHandler('arturgolubev.smartsearch', "onBeforePrepareQuery", "onBeforePrepareQuery"); function onBeforePrepareQuery(&$query){ $query = str_replace('-', ' ', $query); }

* Обработчик из примера изменяет запрос пользователя, заменяя тире в нём на пробел


Для разработчиков

Исключение из поиска определенных элементов

Часто возникают вопросы: "Как исключить из поиска товары определенной группы?" или "Как исключить из поиска товары не в наличии?"

Проблема решается довольно просто, добавлением обработчика индексации для стандартного модуля поиск - https://dev.1c-bitrix.ru/api_help/search/events/beforeindex.php

Данное событие позволяет максимально гибко настроить отключение из поиска элементов по любым признакам - по доступному количеству, по определенному свойству, по разделу и его полю и т.п.


Пример обработчика, который можно доработать под свою задачу:

<? AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler", 10); function BeforeIndexHandler($arFields) { $clearIndex = 0; if($arFields["MODULE_ID"] == 'iblock' && $arFields["TITLE"] != '' && IntVal($arFields["ITEM_ID"])) { if(CModule::IncludeModule("iblock")){ $res = CIBlockElement::GetList(Array(), array("ID"=>$arFields["ITEM_ID"]), false, Array("nPageSize"=>1), array("ID", "NAME", "IBLOCK_SECTION_ID")); while($fields = $res->Fetch()) { if($fields["IBLOCK_SECTION_ID"]){ $nav = CIBlockSection::GetNavChain(false, $fields["IBLOCK_SECTION_ID"], array("ID", "NAME", "ACTIVE")); while($flds = $nav->Fetch()){ if($flds["ACTIVE"] == 'N'){ $clearIndex = 1; } } } } } } if($clearIndex) { $arFields["TITLE"] = ''; $arFields["BODY"] = ''; $arFields["TAGS"] = ''; } return $arFields; } ?>

* Обработчик из примера проверяет поле активности у разделов, в которые вложен товар, и исключает его из поиска, если один из разделов неактивен.


Настраиваемые фильтры

Решение "Умный поиск" поддерживает дополнительные фильтры для компонентов search.page и search.title. Т.к. решение расширяет стандартный модуль поиска - работа и структура фильтров идентична стандартным фильтрам модуля Поиск.
При создании фильтра особое внимание обратите формату - у поиска другой формат фильтра, отличающийся от фильтров для инфоблоков! Для фильтрации по параметру его нужно предварительно заиндексировать.

Подробная инструкция по настройке и разбор технологии фильтров поиска есть в документации битрикса - читать в первоисточнике


Фильтры заложенные "из коробки":


1. Фильтр по доступности товара (На основе стандартного поля CATALOG_AVAILABLE)
Позволяет убрать из поиска недоступные товары

global $arTitleSearchFilter; $arTitleSearchFilter = array("PARAMS" => array("catalog_available"=>'Y'));


Пример создания фильтра по свойству инфоблока:


В примере ниже индексация свойства инфоблока и последующая фильтрация по значению свойства. Это типовой пример - при использовании обязательно проверяйте и адаптируйте под свой проект.

1. Добавляем событие индексации (в примере индексируется свойство с кодом MATERIAL)
AddEventHandler("search", "BeforeIndex", "addElementPropertyToSearchindex"); function addElementPropertyToSearchindex($arFields) { if($arFields["MODULE_ID"] == 'iblock' && substr($arFields["ITEM_ID"], 0, 1) != "S"){ if(CModule::IncludeModule("iblock")) { $indexProp = 'MATERIAL'; $arFields["PARAMS"]["filter_prop"] = []; $lstSelect = [ 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_'.$indexProp ]; $dctFilter = [ 'IBLOCK_ID'=> $arFields['PARAM2'], 'ID' => $arFields['ITEM_ID'], ]; $rdb = \CIBlockElement::GetList([], $dctFilter, false, false, $lstSelect); while($dctElement = $rdb->fetch()) { $arFields["PARAMS"]["filter_prop"][] = $dctElement['PROPERTY_'.$indexProp.'_VALUE']; } } } return $arFields; }
После добавления и отладки кода индексации свойства делаем полную переиндексацию поиска.

2. Устанавливаем фильтр для компонентов поиска

Перед компонентами задаём переменную с фильтром:
global $arSearchFilter; $arSearchFilter = array("PARAMS" => array("filter_prop"=>'Тест'));
В параметре компонента FILTER_NAME указываем название переменной с фильтром:
"FILTER_NAME" => "arSearchFilter",

Увеличение скорости работы поиска

В данной главе опишу параметры на которые нужно обратить внимание для более быстрой и качественной работы умного поиска

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

Настройки связанные с поиском и индексом:


1. Лишние данные в поисковом индексе

Если поиск на вашем сайте ищет только по каталогу, то логично, что не имеет смысла загружать поисковый индекс ненужными данными.

Пройдитесь по всем инфоблокам (особенно служебным) и выключите индексацию поиском в инфоблоках не участвующих в поиске

smartsearch_iblock.png


Так же откройте настройки модуля "Поиск" (Кнопка "Настройки" в верхней части админ панели, далее в списке выберите "Поиск"), в маске исключения добавьте ;/*; - это отключит индексацию статических файлов

smartsearch_mask.png

2. Ограничение поискового запроса для страницы поиска и опция быстрого поиска

Так же одной из частых проблем является некорректная настройка ограничителя поискового запроса. Проверить его можно в настройках модуля "Поиск" (Кнопка "Настройки" в верхней части админ панели, далее в списке выберите "Поиск"). И перейдя на вкладку поиск.

Рекомендую устанавливать опцию "Максимальное количество документов в результатах поиска" в интервале от 200 до 500 элементов. Так же на этой вкладке проверяйте наличии опции "Использовать быстрый поиск", её можно ставить не боясь за ранжирование.

smartsearch_search_settings.png


3. Упрощенный режим работы умного поиска

В решении на случай слабых хостингов/серверов есть настройка "Режима работы" - она позволяет включить облегченный режим работы - "Базовый". При переходе на базовый режим работы решение будет работать быстрее

4. Отключения поиска по описаниям

В настройках решения можно отключить поиск по описаниям, установив галочку "Отключить поиск по описаниям на поисковой странице". В большинстве случаев поиск по описаниям очень малорелевантен, поэтому рекомендую устанавливать эту опцию всегда.

Оптимизации битрикса / северная часть:

Так же не стоит забывать о настройках системы и мощности хостинга. Если настройки системы не оптимальные либо мощности хостинга не хватает на выполнение поисковых запросов достаточно быстро - никакой калибровкой поисковых механизмов это не поправить.

У битрикса есть 3 встроенных монитора проверки настроек и ресурсов. Все они должны проходить проверку без ошибок (это основа всех основ, которая положительно влияет на весь сайт, а не только на поисковый модуль)

1. Проверка системы - В левом меню нажимаем "Настройки" - "Инструменты" - "Проверка системы". После прохождения ошибок быть не должно

2. Панель производительности - В левом меню нажимаем "Настройки" - "Производительность" - "Панель производительности". Оценка должна быть не ниже эталонной, если у вас сайт с большим количеством (более 25т) - производительность должна соответствовать. На вкладке Битрикс должно быть "Оптимально"

3. Сервер БД - В левом меню нажимаем "Настройки" - "Производительность" - "Сервер БД". Красных значений быть не должно

4. Shinx - Если у вас большое количество товаров (>30т), рассмотрите возможность использования дополнительной серверной библиотеки sphinx



Индексация дополнительных данных

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

В этом случае данные можно доиндексировать событием:

AddEventHandler("search", "BeforeIndex", "agSearchIndexAddDopInfo", 10); function agSearchIndexAddDopInfo($arFields){ if($arFields["MODULE_ID"] == 'iblock' && $arFields["TITLE"]){ if($arFields["ITEM_ID"] && substr($arFields["ITEM_ID"], 0, 1) != "S"){ $dop_data = 'Element dop info'; // дополнительная информация $arFields["TITLE"] .= $dop_data; } } return $arFields; }

Дополнительные полезные функции

Процесс интеграции умного поиска в разные шаблоны и сайты может отличаться в зависимости от архитектуры проекта. В данной заметке будут публиковаться вспомогательные функции для адаптации функционала решения с шаблоном сайта.


1. Добавить в массив ID найденных товаров все ID торговых предложений (при наличии).

$arProductAndSkuIDs = \Arturgolubev\Smartsearch\Tools::dwAddSkuId($arProductIDs);

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


2. Получить массив ID основных товаров, по смешанному массиву Товары + торговые предложения

$arProductIDs = CArturgolubevSmartsearch::getProductIdByMixed($arProductAndSkuIDs);

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

3. Переиндексировать конкретный элемент инфоблока

CIBlockElement::UpdateSearch($ID, true);

Функция будет полезна, если вы изменили элемент по api без базовой автопереиндексации, например через CIBlockElement::SetPropertyValuesEx и нужно принудительно переиндексировать элемент