Поиск — стандартная функциональность любого сайта. Но знали ли вы, что его можно улучшить? Особенно актуально для повышении конверсии интернет-магазинов.
Умный поиск с исправлением ошибок в запросе, подсказками и настраиваемой областью поиска — повышение качества и удобства поиска на сайте обеспечено.
Исправление ошибок и опечаток основывается на базе данных сайта и не требует дополнительных усилий с вашей стороны. Кроме автоматического исправления ошибок решение позволяет расширить область поиска, например, искать по тегам или свойствам товаров даже при интерактивном поиска.
Компоненты решения полностью совместимы со стандартными шаблонами bitrix:search.title и bitrix.search.page. При этом плагин можно использовать с вашим индивидуальным дизайном сайта.
Возможности плагина «Умный поиск с исправлением ошибок в запросе, подсказками и настраиваемой областью поиска»
- Поиск релевантной информации по запросу
- Сохранение индивидуального дизайна и шаблонов поиска
- Исправление ошибок в словах и словосочетаниях
- Поиск по транслитерации
- Исправление раскладки клавиатуры
- Поиск по тегам товаров
- Поиск по свойствам
- Поиск по внутренним вхождениям
- Свои правила исправления
- Приоритет
Решение выполняет качественный поиск по сайту с целью найти наиболее подходящую информацию по запросу пользователя. Возможна настройка области поиска (выбор данных, по которым будет происходить поиск).
Шаблоны стандартных компонентов совместимы с компонентами решения, то есть при его установке вы полностью сохраните индивидуальный дизайн на сайте. Либо вы можете использовать шаблоны поиска, которые идут в коробке с решением. Они отличаются адаптивностью, функциональностью, могут выводить подсказки (включая вывод картинки, цену, скидку и текст описания товара).

Решение исправляет ошибки в словах и словосочетаниях автоматически на основе запроса пользователя и базы данных сайта.
Пример: при вводе «плотье» плагин найдет на сайте «платье», при вводе «мужкая мойка» — «мужская майка».

Решение умеет находить товар, если вы вводите его на другом языке.
Пример: при вводе бренда «дайсон» найдет «Dyson».

Решение предполагает 2 варианта исправления раскладки: стандартный и усиленный. Усиленный режим раскладки не связан с морфологией и может искать проблемы с раскладкой у артикулов и т.д.
Пример: при вводе «,tnjy» найдет «бетон».

Часто в интернет-магазинах для товаров прописываются теги — слова не связанные с продуктами, но имеющее значение для поиска.
Пример: находим Iphone по тегам «Айфон» и «Яблоко».
Часто пользователи запоминают не столько название товара, сколько его характеристики: артикул, бренд или производитель.

Этот вид поиска нужен не всегда, но для сайтов, продающих автодетали и другие похожие товары, он необходим.
Пример: поиск «110HT» найдет «GA-110HT-8AER».
На вашем сайте есть товары, которые должны выдаваться по особенным запросам или вы хотите задать поиску как исправить конкретное слово? Просто задайте свои правила.

С помощью готового решения вы можете легко настроить приоритет на поиске товарам в наличии и по разделам.
Всегда поможем
Понравилось решение, но боитесь, что не справитесь? Пишите нам на почту mail@adm-center.ru, звоните по номеру 8 (928) 163-11-00 или оставьте заявку ниже. Наш менеджер обязательно с вами свяжется.
Подберем готовое решение, внедрим и настроим его, кастомизируем в соответствии с видом деятельности и спецификой бизнеса. Теперь ваш бизнес — наша забота!
Артур Голубев
Готовые решения для 1С-Битрикс
Часто задаваемые вопросы:
Умный поиск с исправлением ошибок в запросе и подсказками
Установка решения
Установка данного решения включает в себя размещение и настройку компонентов, поэтому без базовых навыки работы с кодом не обойтись. Процесс установки решения не сложен и занимает в среднем около часа. При необходимости помогу с установкой и отвечу на вопросы — пишите на почту me@arturgolubev.ru
Важная базовая информация:
- Перед установкой пройдите «Проверку системы» на сайте стандартным инструментом битрикса (Админка->Настройки->Инструменты->Проверка системы). Если там есть ошибки — исправьте их. Особенно критичны константы UFT и работа со строками — если в этих пунктах есть ошибки, решение будет работает некорректно.
-
Решение включает в себя 2 компонента: Умный поиск по заголовкам (search.title) — интерактивный поиск и Умная страница поиска (search.page) — поисковая страница
-
Решение имеет набор общих настроек. Для изменения настроек нажмите «Настройки» в верхней части админ-панели и в списке модулей выберите «Умный поиск с исправлением ошибок и подсказками»
Ситуация 1. У вас на сайте не установлены компоненты поиска
В этой ситуации нам нужно с нуля настроить компоненты и разместить их в шаблоне либо на определенных страницах
1. Создайте тестовую страничку для первичного размещения и настройки компонента. Измените страничку в Визуальном редакторе
2. Разместите на данной странице компонент «Умный поиск по заголовкам» (search.title)

3. В настройках компонента (двойной клик по размещенному компоненту в визуальном редакторе) сделайте следующие настройки:
-
«Количество категорий поиска» — укажите 1. Указание большего количества категорий не рекомендуется, т.к. крайне негативно влияет на скорость работы поиска
-
Обязательно заполните «Ограничение области поиска». В этой настройке выберите только важные данные по которым нужно искать (например каталог товаров). Пример настройки для поиска по каталогу:
-
Если решение устанавливается на редакцию малый бизнес или старше, в настройках будет возможность указать цену которую нужно вывести и конвертацию в валюту
-
Остальные настройки такие как сортировка, количество результатов заполните исходя из ваших задач
-
После завершения настроек сохраните настройки и страницу
4. После завершения настройки и проверки интерактивного поиска откройте страничку в режиме html-кода, скопируйте код уже настроенного компонента и разместите его в шаблоне сайта, шапке или других запланированных местах
5. После размещения интерактивного поиска в шаблоне сайта, удалите его с тестовой страницы. Разместите на странице компонент «Умная страница поиска» (search.page) и настройте (настройки страницы схожи с настройками интерактивного поиска).
6. Скопируйте код настроенного компонента поисковой страницы и разместите на нужной странице.
Если редакция с каталогом и требуется настроить вывод результатов поиска на странице в виде карточек, компонент поисковой страницы нужно установить в компонент catalog.search, заменив в нём стандартный компонент bitrix:search.page, на тот что вы настроили ранее.
Ситуация 2. У вас на сайте установлены стандартные компоненты bitrix:search.page, bitrix:search.title (90% случаев)
В данной ситуации нам необходимо найти вызовы стандартны компонентов и заменить их на вызовы компонентов, установленных модулем
1. Первым делом найдем вызов компонента интерактивного поиска, чаще всего он расположен в шаблоне сайта (header.php, footer.php) либо во включаемых областях, расположенных в шаблоне сайта. Вызов компонента выглядит следующим образом:

2. Замените подчеркнутые надписи на «arturgolubev» (пространство имён) и «.default» (шаблон)

3. Сохраните и проверьте работу. Настраивать в данном случае не обязательно, т.к. при подобной замене сделанные ранее настройки стандартного компонента перекочевали на компонент модуля.
4. Откройте вашу поисковую страницу. Изучите что расположено на данной странице.
- Если на странице расположен компонент bitrix:search.page, то замените его вызов по схеме ниже
- Если расположен компонент bitrix:catalog.search, то необходимо в шаблоне данного компонента (template.php) найти вызов компонента bitrix:search.page и заменить по схеме ниже
- Если на странице расположен комплексный компонент bitrix:catalog, то необходимо в шаблоне компонента вызываемый компонент bitrix:catalog.search, далее в его шаблоне найти bitrix:search.page и заменить по схеме ниже
После того как мы нашли компонент Cтраницы поиска bitrix:search.page нужно как и в ситуации с интерактивным поиском заменить вызов:

на

5. Если необходимо сохранить дизайн, который использовался до установки решения
-
Скопируйте использовавшийся шаблон bitrix:search.title в
/bitrix/templates/ВАШ_ШАБЛОН/components/arturgolubev/search.title/ (если папки по пути назначения отсутствуют, просто создайте их) - Скопируйте использовавшийся шаблон bitrix:search.page в
/bitrix/templates/ВАШ_ШАБЛОН/components/arturgolubev/search.page/ (если папки по пути назначения отсутствуют, просто создайте их) - И примените их к установленным предыдущими пунктами компонентам
Готово : )
Описание
«Умный поиск с исправлением ошибок в запросе и подсказками» — это решение, повышающее эффектность алгоритмов поиска на вашем сайте за счёт обработки ошибок и опечаток пользователей в написании запроса. Алгоритмы модуля основаны на метафоническом анализе звучания и орфографическом соответствии слов.
Компоненты решения позволяют искать не только по стандартным полям, таким как название, но и по свойствам товаров и тегам!
Модуль полностью совместим со стандартными шаблонами компонентов search.title и search.page. Вы сможете установить более эффективный поиск и не теряя дизан-оформление вашего сайта.
1. Выводить подсказки, с возможностью вывода картинки, цены, скидки и текста описания
2. Исправлять орфографические ошибки пользователей в написании слов (например при вводе «кампрессор» модуль найдет на сайте «компрессор»)
3. Искать по словосочетаниям и исправлять ошибки если они сделаны в одном или нескольких словах (например при вводе «тримр бинзиновый» найдет «бензиновый триммер»)
4. Определять слова введенные буквами другого языка (например при вводе названия бренда «девольт» найдёт «DeWalt»)
5. Исправлять раскладку клавиатуры (например при вводе «,typjgbkf» найдет «Бензопила»)
6. *NEW* Поиск по тегам (для товаров можно прописать поисковые слова. Например — находить iPhone по написаню «Айфон» или «Яблоко»)
7. *NEW* Поиск по свойствам (например поиск по артикулу, производителю и т.п.)
* Все указанные примеры можно проверить в онлайн-демо
Для понимания принципов работы и возможностей модуля вы можете посмотреть два онлайн-демо:
— Стандартный магазин 1с-Битрикс
— Интернет магазин инструмента
- Продуманный дизайн «Из коробки»
- Решение адаптивно и хорошо смотрится как на компьютере, так и на телефоне и планшете
- Поддержка 5 популярных цветовых тем
- Возможность отображения картинки, цены, скидки и текста описания в быстром поиске
- Быстрая и простая установка
- Простая адаптация к вашему дизайну поиска
- Работает с композитным и автокомпозитным режимом
- Работает по механизму многосайтовости
- Одинаково хорошо работает с кодировками UTF-8 и Windows-1251
- Работает на большинстве редакций и версий 1с-Битрикс
Как происходит процесс заказа
Вы решили приобрести готовое решение. Для этого нужно сделать несколько простых действий:
1. Заполнить форму заказа. Занесите свою контактную информацию в форму. Выберите дополнительные опции, которые хотите приобрести вместе с решением (Наполнение вашей информацией и Разработка уникального дизайна). Отправьте данные формы.
2. Дождаться звонка консультанта. В течение часа вам перезвонит ваш персональный консультант по услугам и объяснит особенности по приобретению выбранного вами готового решения. А также согласует с вами дальнейшие действия.
3. Заключить договор на приобретение готового решения. Необходимо будет подписать договор на приобретение готового решения, после этого мы сможем выставить счет на оплату готового решения и наших услуг по его установке и настройке.
4. Оплатить счет. После оплаты счета ваш проект будет передан в отдел работы с готовыми решениями. Мы выделим вам персонального аккаунт-менеджера, который будет с вами работать вплоть до закрытия работ по установке и настройке готового решения
Вы получаете полностью готовый сайт
Купленные программные продукты поставляются в виде цифро-буквенного кода, используя который их можно установить на хостинг согласно инструкции. Код отправляется онлайн на указанную в заказе электронную почту.
После получения оплаты от покупателя до момента отправки ему лицензионного ключа может пройти несколько часов.
На протяжении этого времени проводится оформление купленной программной продукции.
Внимание! Неправильно указанный e-mail может привести к дополнительной задержке. Пожалуйста, проверяйте ваши персональные данные при регистрации и оформлении заказа. Конфиденциальность ваших данных гарантируется.
Для установки вам потребуется
- Система управления «Битрикс» (подходящей редакции);
- Домен;
- Хостинг.
Все это вы можете купить в готовом наборе у нас на сайте, ускорив процесс дальнейшей установки.
Базовую установку мы сделаем для вас бесплатно!
В стоимость сайта включено:
- Шаблон сайта 1С-Битрикс
- Хостинг и Домен
- Перенос и настройка сайта
- Бесплатная консультация
Узнать подробности и задать вопросы можно по телефону:
+7 (391) 278-278-8
Если битрикс свежий и в папке /bitrix/ есть файл .settings.php, то там можно указать файл для лога ошибок и типы ошибок которые будут туда записываться.
У меня на локалке настройки такие:
'exception_handling' =>
array (
'value' =>
array (
'debug' => true,
'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
'ignore_silence' => true,
'assertion_throws_exception' => false,
'assertion_error_type' => 256,
'log' => array (
'settings' => array (
'file' => 'bitrix/modules/error.log',
'log_size' => 1000000,
),
),
),
'readonly' => true,
),
Сегодня я вам расскажу как я улучшал стандартный функционал поиска на bitrix. Я покажу функции которые позволяют исправлять грамматические ошибки поисковых запросов, искать по части слова и по свойствам товаров.
Для начала я вам расскажу что я использовал для своей задачи.
- Во-первых, я сразу же отказался от стандартного метода поиска и поставил на свой хостинг Sphinx. Для своих сайтов я использую хостинг Beget, где в качестве дополнений можно установить данный модуль.
- Во-вторых, для исправления грамматических ошибок я буду использовать сервис Спеллер https://yandex.ru/dev/speller/ . Данный сервис получает текст с ошибкой через GET или POST запрос и возвращает исправленный текст в json формате.
Установка Sphinx сразу же решает проблему с индексацией по «части слова». Для того чтобы установить Sphinx необходимо перейти в Настройки->Настройки модулей->Поиск->Морфология и в поле «Полнотекстовый поиск с помощь Sphinx.
Конечно у меня не сразу получилось это сделать, но для решения своей проблемы я обратился в тех поддержку и он мне помогли.
Логика состоит в следующем — я буду делать первый запрос на получение товаров интернет магазина через поиск, если товары не приходят проверяют текст запроса на ошибки и делаю доп запрос.
Будут проверятся следующие виды ошибок:
- Неполные слова: див (диван), кров (кровать), бар (барная стойка)
- По свойству товара: желтый, синий
- По наличию буквы «Ё«.
На bitrix такая проблема что жёлтый и желтый это два разных ответа, первый возвращал 2 товара, второй больше - Грамматические ошибки: крАвать, жОлтый
- Сложные запросы: желтый диван, желтая кровать
- Сложные ошибочные запросы: жОлтая крАвать
- По названию: лофт
- Слова в английской транскрипции: ;tknsq, lbdfy
Теперь давайте рассмотрим сам код. Код у нас будет только на языке PHP.
Первым делом я напишу класс в котором будут записаны основные методы для обработки поисковых запросов.
Сразу замечу что фраза для поискового запроса хранится в $_REQUEST[«q»] поэтому перед каждым новым запросом я буду записывать новую поисковую строку именно в эту переменную.
class DopSearchClass {
/* ДЕЛАЕМ ЗАПРОС НА ПРОВЕРКУ ГРАММАТИКИ */
public function checkValueSearch($textSearch) {
$textQuery = urlencode($textSearch);
$url = "https://speller.yandex.net/services/spellservice.json/checkText?text=".$textQuery;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$resultCheck = curl_exec($curl);
$resultCheck = json_decode($resultCheck, true);
if($resultCheck) {
/* массив в который будут записываться обработанные значения */
$listCurrentText = array();
/* если у нас только одно ошибочное слово */
if(count($resultCheck) == 1) {
/* записываем вариант ошибки */
$falseText = $resultCheck[0]["word"];
/* преобразуем ассоциативный массив в обычный */
$arrValidWord = array_values($resultCheck[0]["s"]);
/* удаляем однокоренные слова */
$validWord = $this->clearBySixFirstLetter($arrValidWord);
foreach($validWord as $word) {
$newTextSearch = str_replace($falseText, $word, $textSearch);
array_push($listCurrentText, $newTextSearch);
}
}
/* если несколько ошибочных слов */
else if(count($resultCheck) > 1) {
foreach($resultCheck as $arrWord) {
$falseText = $arrWord["word"];
$textSearch = str_replace($falseText, $arrWord["s"][0], $textSearch);
}
array_push($listCurrentText, $textSearch);
}
return $listCurrentText;
}
}
/* УДАЛЯЕМ ОДНОКОРЕННЫЕ СЛОВА */
public function clearBySixFirstLetter($array) {
/* записываем корни слов */
$has = [];
return array_filter(
$array,
function ($word) use (&$has) {
$sixLetters = mb_substr($word, 0, 6);
if (!in_array($sixLetters, $has)) {
array_push($has, $sixLetters);
return true;
}
return false;
}
);
}
/* МЕНЯЕМ "Ё" НА "Е" */
public function alternateSymbol($str) {
$str = strtolower($str);
return str_replace("ё", "е", $str);
}
}
Давайте я немного расскажу по каждому методу…
- checkValueSearch — делает запрос на проверку грамматики. Если есть ошибка в одном слове, то мы берём все варианты правильного значения и в дальнейшем делаем перезапрос с новыми словами. Если у нас НЕСКОЛЬКО ОШИБОЧНЫХ СЛОВ, то для упрощения с сделал так чтобы доставался 1 правильный вариант по каждому слову и формировалась новая строка запроса. Для улучшения вы можете составить комбинации из всех значений и пройтись по всем, мне же достаточно и этого!
- clearBySixFirstLetter — удаляет однокоренные слова из полученных значений от Яндекс Спеллер. Дело в том что в «битриксовском» поиске уже есть возможность использовать морфологический анализ для получения результата, поэтому однокоренные слова будут возвращать одинаковый результат.
- alternateSymbol — ищет в строке запроса букву «Ё» и если она есть, то добавляет значения с вариантом «Е». Получается что слово «жёлтый» вернёт значения для себя и для слова «желтый»
Ниже в этом же файле я запускаю работу основного скрипта.
Для начала я просто делаю запрос и проверяю есть ли результат. Проводить все доп запросы я буду только если ответ пустой или имеет букву «Ё» в слове.
/* вначале делаем поисковой запрос без преобразования */
$searchResult = $APPLICATION->IncludeComponent(
"bitrix:search.page",
"ajax",
array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "N",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "500",
"RESTART" => "Y",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "N",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array(
0 => "iblock_catalog",
),
"arrWHERE" => array(
0 => "iblock_catalog",
),
"COMPONENT_TEMPLATE" => "ajax",
"arrFILTER_iblock_catalog" => array(
0 => "5",
)
),
false
);
Если результат есть, то попробуем поискать букву Ё в словах. Если Ё есть то делаем новый запрос и сливаем массивы.
/* если товары есть, то проверяем значение запроса на наличие буквы "Ё" */
if(count($searchResult) > 0) {
if(strpos($_REQUEST["q"], "ё") !== false) {
$newSearchCheck = new DopSearchClass();
$_REQUEST["q"] = $newSearchCheck->alternateSymbol($_REQUEST["q"]);
/* в нижний регистр */
$str = strtolower($_REQUEST["q"]);
$_REQUEST["q"] = str_replace("ё", "е", $str);
$thisSearchResult = $APPLICATION->IncludeComponent(
"bitrix:search.page",
"ajax",
array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "N",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "500",
"RESTART" => "Y",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "N",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array(
0 => "iblock_catalog",
),
"arrWHERE" => array(
0 => "iblock_catalog",
),
"COMPONENT_TEMPLATE" => "ajax",
"arrFILTER_iblock_catalog" => array(
0 => "5",
)
),
false
);
/* если результат есть, то сливаем его с полным результатом */
if($thisSearchResult) {
$searchResult = array_merge($searchResult, $thisSearchResult);
}
}
}
Если первый запрос не вернул результат то вначале опять проверяем запрос на букву «Ё», но только в этот раз мы проверяем когда пришёл пустой ответ, а потом если опять результатов не будет то делаем запрос на проверку грамматических ошибок.
/* если пришёл пустой результат */
else if(count($searchResult) < 1) {
$newSearchCheck = new DopSearchClass();
/* если ошибка только в букве "Ё" */
if(strpos($_REQUEST["q"], "ё") !== false) {
$_REQUEST["q"] = $newSearchCheck->alternateSymbol($_REQUEST["q"]);
$str = strtolower($_REQUEST["q"]);
$_REQUEST["q"] = str_replace("ё", "е", $str);
$thisSearchResult = $APPLICATION->IncludeComponent(
"bitrix:search.page",
"ajax",
array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "N",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "500",
"RESTART" => "Y",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "N",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array(
0 => "iblock_catalog",
),
"arrWHERE" => array(
0 => "iblock_catalog",
),
"COMPONENT_TEMPLATE" => "ajax",
"arrFILTER_iblock_catalog" => array(
0 => "5",
)
),
false
);
/* если результат есть, то сливаем его с полным результатом */
if($thisSearchResult) {
$searchResult = array_merge($searchResult, $thisSearchResult);
}
}
/* если исправление буквы "Ё" не помогло и опять вернулся пустой ответ */
if(count($searchResult) < 1) {
/* проверям грамматику */
$arrValidWord = $newSearchCheck->checkValueSearch($_REQUEST["q"]);
/* если такого слова не существует */
if(count($arrValidWord) == 0) {
$errorMessageSearch = "К сожалению по данному запросу мы не чего не нашли!";
}
else if(count($arrValidWord) > 0) {
/* делаем запрос по каждому варианту ИСПРАВЛЕННОГО слова */
foreach($arrValidWord as $word) {
$_REQUEST["q"] = $word;
$thisSearchResult = $APPLICATION->IncludeComponent(
"bitrix:search.page",
"ajax",
array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "N",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "500",
"RESTART" => "Y",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "N",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array(
0 => "iblock_catalog",
),
"arrWHERE" => array(
0 => "iblock_catalog",
),
"COMPONENT_TEMPLATE" => "ajax",
"arrFILTER_iblock_catalog" => array(
0 => "5",
)
),
false
);
/* если результат есть, то сливаем его с полным результатом */
if($thisSearchResult) {
$searchResult = array_merge($searchResult, $thisSearchResult);
}
/* проверяем слово запроса н наличие буквы "Ё" и заменяем её на "Е" */
if(strpos($word, "ё") !== false) {
$_REQUEST["q"] = $newSearchCheck->alternateSymbol($word);
$thisSearchResult = $APPLICATION->IncludeComponent(
"bitrix:search.page",
"ajax",
array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "N",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "500",
"RESTART" => "Y",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "N",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array(
0 => "iblock_catalog",
),
"arrWHERE" => array(
0 => "iblock_catalog",
),
"COMPONENT_TEMPLATE" => "ajax",
"arrFILTER_iblock_catalog" => array(
0 => "5",
)
),
false
);
/* если результат есть, то сливаем его с полным результатом */
if($thisSearchResult) {
$searchResult = array_merge($searchResult, $thisSearchResult);
}
}
}
}
}
}
После использования данного способа у вас не получится сделать полностью идеальный поиск, так как здесь есть ещё над чем поработать, но в любом случае данные преобразования гораздо улучшат ваш поиск.
Я понимаю что данный способ использует в своей работе запросы на компонент поиска через цикл, чего я категорически не рекомендую делать, так как это сильно нагружает сайт, но в данном случае я не нашёл другого выхода как можно добиться результата.
Не смотря на это вы всегда можете записать полученные значения в кэш и вытаскивать их при повторном запросе. Если у меня будут время, я обязательно поделюсь тем как это можно сделать используя базовый функционал битрикса.
