Перейти к содержанию
Aleksey

Пробел в поисковом запросе

Рекомендуемые сообщения

Можно ли как-то улучшить поиск.

Сейчас, если добавить в начале или в конце поисковой фразы пробел, вываливает весь список товаров. Даже, если наборать абракадабру с пробелом в конце, то получится, что все товары подходят под запрос. Это очень хреново. Может быть есть какое-то решение.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят, неужели нет решения? косяк-то, по-моему, серьезный, как и то, что поиск ищет вхождение любого слова из словосочетания, а не словосочетание целиком. Может быть есть платный модуль или кто платно возьмется за работу

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

catalogcontrollerproductsearch.php, 199

'filter_name'		 => trim($filter_name),
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле catalogmodelcatalogproduct.php ищеш строки

$words = explode(' ', $data['filter_name']);
и

$words = explode(' ', $data['filter_tag']);
таких строк будет 4-е...

после каждой найденной строки добавь строку

$words = array_filter(array_unique($words), 'strlen');
  • +1 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

catalogcontrollerproductsearch.php, 199

'filter_name'		 => trim($filter_name),
От двойного пробела между словами это не спасёт...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо.

Не сочтите за наглость, но может быть есть решение и второго вопроса. Я имею ввиду, чтобы поиск искал входение всех слов из поискового запроса. А то как-то не логично, когда набираешь, например, Конструктор Лего самолет, а тебе вываливает все конструкторы (и лего и не лего), + все самолеты, да + ещё всё лего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо.

Не сочтите за наглость, но может быть есть решение и второго вопроса. Я имею ввиду, чтобы поиск искал входение всех слов из поискового запроса. А то как-то не логично, когда набираешь, например, Конструктор Лего самолет, а тебе вываливает все конструкторы (и лего и не лего), + все самолеты, да + ещё всё лего.

помимо #4

8ю строками ниже

		   	 if ($implode) {
					$sql .= " " . implode(" OR ", $implode) . "";
				}

заменить на

if ($implode) {
					$sql .= " " . implode(" AND ", $implode) . "";
				}
  • +1 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вау :), то, что нужно! Большое спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос снят! Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заменял OR на AND в двух строка 68 и 87

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я чуть-чуть по-другому сделал.

В файле catalogviewjavascriptcommon.js добавляем свою функцию:

function trim(string)
{
return string.replace(/(^s+)|(s+$)/g, "");
}

Затем в том же файле в двух местах после

var filter_name = $('input[name='filter_name']').attr('value')

вставляем

filter_name = trim(filter_name);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у меня поиск так и не заработал. Непонимаю почему, но похоже, что он неверно интерпретирует русскоязычные названия. По каким критериям он в поиске выдает так и не понял.

Попробовал с англ. позициями - все ок.

Помогите советом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, полезная доработка.

Но есть еще проблемка, как избавиться от регистра? У меня поиск, по крайней мере по названию товара, чувствителен к регистру символа! если ввести название товара с маленькой буквы, оно не попадает в результаты поиска :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя тоже заметил какие-то непонятки с поиском :( кроме регистра он все таки не корректно ищет после замены OR на AND, а точнее ищет совсем не по критерию "И". Менял в 2х местах:

после строки

$words = explode(' ', $data['filter_name']); $sql .= " " . implode(" AND ", $implode) . "";

и после строки

$words = explode(' ', $data['filter_tag']); $sql .= " " . implode(" AND ", $implode) . "";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

весия 1.5.3.1

После всех перечисленных способов ничего так и не поменлось

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

весия 1.5.3.1

После всех перечисленных способов ничего так и не поменлось

В 1.5.3.1 с пробелами проблемы нет и ничего делать не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 1.5.3.1 с пробелами проблемы нет и ничего делать не надо.

хммм, походу у меня особый случай. Если тег состоит из двух слов или если ввести в поиск два слова с пробелом, выводит все товары с любым из слов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это может быть только если ты правил файл catalogmodelcatalogproduct.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, уже во вторую ветку лезу - но нигде ответа не могу найти.

Как перенести форму поиска из хедера в контент (ocstore_v1.5.3.1)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя тоже заметил какие-то непонятки с поиском :( кроме регистра он все таки не корректно ищет после замены OR на AND, а точнее ищет совсем не по критерию "И". Менял в 2х местах:

после строки

$words = explode(' ', $data['filter_name']); $sql .= " " . implode(" AND ", $implode) . "";

и после строки

$words = explode(' ', $data['filter_tag']); $sql .= " " . implode(" AND ", $implode) . "";

Все правильно ты делал в общем-то. просто там к каждому слову по обеи стороны добавляется '%' и точно так же ищет по тегам. соответственно получается тот же ИЛИ.

при желании выпиливаем теги и главное чистим кэш. все заработает.

А что бы поиск по описаниям так же работал правильно добавляем скобочки по краям:

if (!empty($data['filter_description'])) {
  $implode[] = "(LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%')";
 }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, уже во вторую ветку лезу - но нигде ответа не могу найти.

Как перенести форму поиска из хедера в контент (ocstore_v1.5.3.1)?

по идее вот этот модуль должен помочь http://www.opencart.com/index.php?route=extension/extension/info&extension_id=4341&filter_search=search&filter_license=0&sort=e.date_modified&order=DESC&page=5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле catalogmodelcatalogproduct.php ищеш строки
$words = explode(' ', $data['filter_name']);
и
$words = explode(' ', $data['filter_tag']);
таких строк будет 4-е...
после каждой найденной строки добавь строку
$words = array_filter(array_unique($words), 'strlen');

После такого метода, при вводе пробела без слов получаю ошибку базы:

Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR )' at line 1
Error No: 1064
SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_tag pt ON (p.product_id = pt.product_id) WHERE pd.language_id = '2' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND ( OR ) in /system/database/mysql.php on line 49

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема присутствует

сделал что рекомендуется но

сайт shop.supersam.ua версия ocStore v1.5.1.3

поиск конкретного товара Мойка MRG 611-62

должен показать 1 товар а показывает кучу как решить эту проблему если нужна оплата сразу говорите сколько.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.