Наверняка, все знают, что в битриксе есть морфологический поиск. И вроде бы он даже худо-бедно работает. Но если мы торгуем товарами, и хотим, чтобы поиск искал и по части чего-то специфического, например, артикула товара (пример: артикул «Р6543», подстрокой будет «6543»), то ничего из этого не выйдет. Поиск тупо ничего не найдёт.
Как можно решить?
Как вариант, в момент индексации элемента добавлять в таблицу b_search_content_stem наши части слов. То есть, в нашем случае, для товара с артикулом «Р6543» мы добавим «6543» в поисковый индекс. Запросы «654» и «65» так же будут отдавать товар с артикулом «Р6543».
К сожалению при поиске артикулов все очень печально. Хотите искать подстроки - отключайте морфологию.
Пару лет назад бились над такой же задачей. Из-за жестких требований пришлось очень сильно докрутить механизм индексации. Самостоятельно резали весь текст на n-граммы, переписывали формулу релевантности. Итог: "оно иногда дышало", но размер индекса был просто неприличный - около 4 Гб.
Также пробовали Sphinx, но там тупик. В режиме realtime-индексирования (а именно так битрикс работает) он не поддерживает поиск подстрок.
Алексей Шкарупа, в нашем случае каталог в 4к позиций. В принципе, этот приём решил проблему с поиском по артикулам и включенной морфологией. Увеличение в нашем случае только таблицы со стемами и с нашими объемами это сложно назвать увеличением
Морфологию отключать оочень не хотелось. Со сфинксом у нас тоже был маленький, но не положительный опыт
Столкнувшись с проблемой (в очередной раз), отмечусь и я тут.
Оптимальным было бы просто не использовать морфологию конкретно для слов, которые не являются естественными. Например, для русскоязычного сайта это слова, содержащие цифры и латинские буквы (склонять английские названия очень редко надо). Можно было бы сделать отдельной настройкой в модуле.
Почему-то (как я подозреваю, в модуль не лазил) этого не сделали, и сделать самому, боюсь будет долго. Пока склоняюсь к тому, чтобы в своем варианте search.page детектировать похожий на название/артикул запрос (типа \[^\b]*[0-1a-z]+[^\b]*\i) и сразу запускать поиск без морфологии.
Альтернативным вариантом было бы просто добивать результаты морфологического поиска (если их мало получилось, скажем) результатами поиска без морфологии, но тут надо как-то запариться со сквозной навигацией.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».