Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Aleksey

Recommended Posts

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

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

  • +1 1
Надіслати
Поділитися на інших сайтах


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

  • +1 1
Надіслати
Поділитися на інших сайтах


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

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

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

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

$words = array_filter(array_unique($words), 'strlen');
  • +1 4
Надіслати
Поділитися на інших сайтах

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

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

Надіслати
Поділитися на інших сайтах


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

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

помимо #4

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

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

заменить на

if ($implode) {
					$sql .= " " . implode(" AND ", $implode) . "";
				}
  • +1 4
Надіслати
Поділитися на інших сайтах

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

В файле 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);
Надіслати
Поділитися на інших сайтах

  • 3 weeks later...

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


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

после строки

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

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

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

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

весия 1.5.3.1

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

В 1.5.3.1 с пробелами проблемы нет и ничего делать не надо.
Надіслати
Поділитися на інших сайтах

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

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


  • 4 weeks later...

Хотя тоже заметил какие-то непонятки с поиском :( кроме регистра он все таки не корректно ищет после замены 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
Надіслати
Поділитися на інших сайтах

  • 2 months later...

В файле 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
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.