2.7 KiB
SearchText — текст для поиска
App\Helpers\SearchText — единая подготовка поисковых запросов для документов,
товаров, публичных подсказок и глобального поиска панели.
use App\Helpers\SearchText;
Методы
containsRussian($text): bool
Есть ли в тексте кириллица.
SearchText::containsRussian('кресло'); // true
SearchText::containsRussian('chair'); // false
toLatin($input) и toRussian($input)
Создают транслитерированный вариант. Это не исправление раскладки клавиатуры.
SearchText::toLatin('ДБ-11'); // 'DB-11'
SearchText::toRussian('DB-11'); // 'ДБ-11'
switchKeyboardLayout($input)
Исправляет запрос, набранный в другой раскладке.
SearchText::switchKeyboardLayout('ВИ-11'); // 'DB-11'
variants($text): array
Возвращает исходное написание, транслитерацию и исправленную раскладку. Для модельных кодов без разделителя дополнительно создаёт форму с дефисом на границе букв и цифр.
SearchText::variants('ДБ11');
// содержит: ДБ11, ДБ-11, DB11, DB-11
SearchText::variants('ВИ11');
// содержит DB11 и DB-11 после исправления раскладки
Исходный запрос остаётся первым и получает больший поисковый вес. Дополнительные формы нужны только для расширения совпадений: сохранённый артикул не изменяется.
termGroups($text): array
Разбивает фразу на слова. Варианты одного слова объединяются через «ИЛИ», а разные слова могут быть обязательными через «И». Для русских слов добавляется основа без окончания.
Использование
Не исправляйте строку вручную и не заменяйте исходный запрос. Передайте в поисковый слой все варианты:
foreach (SearchText::variants(Request::getStr('q')) as $variant) {
// исходный вариант ранжируется выше, остальные расширяют поиск
}
Для морфологии (разные формы слова) — RussianStemmer.