При поиске ТИРЕ разделяет слова

Автор andreysneg, 05 октября 2015, 23:47:11

« назад - далее »

andreysneg

Prestashop 1.6.14

Искать подстроку - ДА
Поиск точного совпадения с окончанием - НЕТ
Минимальная длинна слова  - 2

Если искать  PG-20 , преста найдет и все товары с PG и все товары с 20. Так не должно быть т.к. есть конкретный товар PG-20
Тире как-то разделяет слова. Как это убрать.

Надо ли переиндексировать после изменения настроек поиска ? Как я понял при изменении минимальной длинны - надо.

Или это причина в индексаторе ?

PrestaMan

В файле /classes/Search.php метод
public static function sanitize($string, $id_lang, $indexation = false, $iso_code = false)
в нем происходит обработка перед поиском.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

andreysneg

А индексация идет средствами Prestashop или Mysql ? Какой фаил ее выполняет ?

coder

Поиск в prestashop
/classes/Search.php
/controllers/front/SearchController.php

andreysneg

В SearchControler ничего не нашел полезного.

А в Search.php много всего и мне не совсем понятно. Пожалуйста помогите найти где это Тире убирается.
В приложении этот фаил Search.php ( измененй нет)

Там была строка.
$string = ltrim(preg_replace('/([^ ])-/', '$1 ', ' '.$string));

Еще там есть PREG_CLASS_SEARCH_EXCLUDE - список кодов для удаления как я понимаю.
И еще PREG_CLASS_PUNCTUATION - там я тоже нашел код Тире и Минуса и убрал.

Все без толку.

Для чего нужны СТОП слова в поиске ?  Туда тире ставил, тоже не помогло.

mAgency

$string = ltrim(preg_replace('/([^ ])-/', '$1 ', ' '.$string));
здесь вырезается тире
Стоп слова, это служебные слова, такие как предлоги и т.д. Из поиска нужно вырезать. Смысл они не несут, поэтому не должны обрабатываться.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

andreysneg

Если убрать эту строку, то он с тире ничего не находит.

Может ли помочь какой-то внешний модуль ? Или они все используют стандартные классы ?

Adik

Все модули использут классы prestashop.
Предворительная обрабока запроса:
if ($indexation) {
        $string = preg_replace('/[._-]+/', ' ', $string);
} else {
        $string = preg_replace('/[._]+/', '', $string);
        $string = ltrim(preg_replace('/([^ ])-/', '$1 ', ' '.$string));
        $string = preg_replace('/[._]+/', '', $string);
        $string = preg_replace('/[^\s]-+/', '', $string);
}

если хотите оставить тире, то удалите везде знак "-".