26

Re: Подсистема поиска. Оптимизация, улучшение

   /**
     * Возвращает подготовленную для поиска likePlus строку
     *
     * @param string $query
     * @return string
     */
    protected function prepareLikePlusString($query)
    {
        $config = ConfigLoader::byModule('search');
        $dis = preg_split('//u', html_entity_decode($config['search_type_likeplus_ignore_symbols']), -1, PREG_SPLIT_NO_EMPTY);

        return str_replace($dis, ' ', mb_strtolower($query));
    }

Уважаемые разработчики, подскажите, пожалуйста, почему замена идет на пробел, а не просто вырезается символ?
У меня с пробелом артикулы, маркировку не ищет. В поле indextext данные идут слитно, но при поиске тире, например, заменетс на пробел и поиск не работает.
Ставлю

   return str_replace($dis, '', mb_strtolower($query));

все замечательно работает

27

Re: Подсистема поиска. Оптимизация, улучшение

Намучался я с поиском. stemmer урезает слово "чернила" до "черн". В поиске куча товаров просто со словом "черный"

28

Re: Подсистема поиска. Оптимизация, улучшение

Ярослав пишет:
   /**
     * Возвращает подготовленную для поиска likePlus строку
     *
     * @param string $query
     * @return string
     */
    protected function prepareLikePlusString($query)
    {
        $config = ConfigLoader::byModule('search');
        $dis = preg_split('//u', html_entity_decode($config['search_type_likeplus_ignore_symbols']), -1, PREG_SPLIT_NO_EMPTY);

        return str_replace($dis, ' ', mb_strtolower($query));
    }

Уважаемые разработчики, подскажите, пожалуйста, почему замена идет на пробел, а не просто вырезается символ?
У меня с пробелом артикулы, маркировку не ищет. В поле indextext данные идут слитно, но при поиске тире, например, заменетс на пробел и поиск не работает.
Ставлю

   return str_replace($dis, '', mb_strtolower($query));

все замечательно работает


Суть опции - search_type_likeplus_ignore_symbols, указать символы, которые будут считаться разделителями слов. Поиск like+ все равно идет по всем словам.

Эта опция не должна формировать новые слова. В случае разделителя ''[пустая строка], Редискрипт будет заниматься формированием новых слов из кусочков других слов.

Плюсом является наглядность при просмотре базы, что и как там сформировалось.

Повысить оценку Понизить оценку

29

Re: Подсистема поиска. Оптимизация, улучшение

В общем то, для артикулов вида DSD-23-23-dsds отдельно модуль приходится делать, добавляющий DSD2323dsds в список.
А как быть с обрезанием окончания? "Чернила" не находятся, зато "2D чехол черный" выводится