OpenCart также выполняет поиск внутри названий продуктов

#php #opencart

#php #opencart

Вопрос:

Я использую OpenCart.

На моем сайте я ищу термин «Красный». Мне представлен ряд результатов, таких как:

  • Красная фетровая сумка
  • Красная сумка для ноутбука
  • и т.д…

Но я также получаю такие результаты, как:

  • Обложка кредитной карты
  • Кожаная обложка для кредитных карт
  • и т.д..

Это потому, что буквы «red» существуют внутри слова «credit». Как я могу предотвратить это и просто выполнить поиск только по всему слову / термину?

Я не думал публиковать весь search.php файл, поскольку я думал, что это будет многовато, был нацелен на тех, кто может знать, что им нужно, чтобы я скопировал сюда, чтобы увидеть.

Ответ №1:

Это потому, что 99,999999% поисковых запросов во всем Интернете работают таким образом. Я понимаю, что вы хотите предоставить своим клиентам только наиболее релевантные результаты, но вы, вероятно, забываете о удобстве использования вашей веб-страницы.

В настоящее время клиенты привыкли искать такие термины, как yes , и ожидают результатов, таких как Yes , yesterday , Yesus , и т. Д. Или даже когда они не знают, как слово продолжается, и помнят только основу слова, а также когда другие слова имеют одинаковую основу, например Nebula , и nebulosa (латинское название вида совы strix nebulosa) — у них одинаковая основа nebul . Теперь, когда вы применяете желаемую модификацию поиска, результаты поиска не будут найдены, пока не будут использованы правильные слова.

Но хорошо, вот необходимые изменения — вам нужно изменить две строки catalog/model/catalog/product.php в методе getProducts() — найдите эту строку (около строки 120):

 $implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
  

и измените его на

 $implode[] = "pd.name = '" . $this->db->escape($word) . "'";
//                    ^- changed LIKE to =
//                       ^- we removed percentage signs -^
  

а затем сделайте то же самое для этой строки (должно быть 128)

 $sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
  

изменение на

 $sql .= " OR pd.description = '" . $this->db->escape($data['filter_name']) . "'";
//                          ^- again changed LIKE to =
//                             ^-     again remove percentage signs here     -^
  

После этих двух изменений поиск должен работать так, как требуется (поиск только полных слов в названиях и описаниях продуктов).