Radimirich

Неправильная выдача поиска

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

Radimirich    0

Здравствуйте. Проблема с поиском. Ситуация такая: 

Есть магазин по продаже деталей. В названиях преобладают числа. Например 113620, 233620, 3620 Л, 3620 Г.

Когда в поиск вбиваю например 3620 выдает сначала 113620 потом 23620(а наименовании много) и  только в конце 3620.

А мне нужно чтобы 3620 был в начале. Как это можно это реализовать? 

 

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


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

Явно - никак

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


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

Не может быть такого, релевантность чисел же присутствует. Значит можно где то это прописать. Помогите пожалуйста

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


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

поэтому и говорю - явно - никак.

 

все сводится к конструкции

%фраза%

 

Можно свести к конструкции

фраза%

%фраза%

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


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

Копай функцию getProducts() в классе ModelCatalogProduct.

Нужно создать SQL-запрос, который выдаст массив товаров с именами, НАЧИНАЮЩИМИСЯ с искомой строки.

Потом к этому массиву добавить массив $product_data[], "родной" для функции. Он выдает товары, у которых имя ПОХОЖЕ (LIKE) на искомую строку.

Исключить дубли.

Вернуть объединенный массив. В нем 3620 будет в начале.

Похоже, для первого запроса достаточно удалить начальный % в строке "pd.name LIKE '%" . $this->db->escape($word) . "%'" (как и предлагает chukcha)

Как-то так...

Изменено пользователем igon

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


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

Попробуйте склонировать метод getProduct() для поиска  и в нем:

ORDER BY name=0, -name DESC, name

Утянуто отсюда

 

По моему может вам помочь.

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


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

Копай функцию getProducts() в классе ModelCatalogProduct.

Нужно создать SQL-запрос, который выдаст массив товаров с именами, НАЧИНАЮЩИМИСЯ с искомой строки.

Потом к этому массиву добавить массив $product_data[], "родной" для функции. Он выдает товары, у которых имя ПОХОЖЕ (LIKE) на искомую строку.

Исключить дубли.

Вернуть объединенный массив. В нем 3620 будет в начале.

Похоже, для первого запроса достаточно удалить начальный % в строке "pd.name LIKE '%" . $this->db->escape($word) . "%'" (как и предлагает chukcha)

Как-то так...

 

Извините я не силен в этом, это все в контроллере search.php нужно править?

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


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

поэтому и говорю - явно - никак.

 

все сводится к конструкции

%фраза%

 

Можно свести к конструкции

фраза%

%фраза%

Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

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


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

Извините я не силен в этом, это все в контроллере search.php нужно править?

Нет, в Model/Catalog/product.php

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


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

Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

Как карта ляжет, все зависит от формируемого алгоритма оптимизации

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


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

Спасибо всем за отзывчивость, буду пробовать, потом отпишусь :-)

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


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

Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

 

Как карта ляжет, все зависит от формируемого алгоритма оптимизации

 

Условие "=", ИМХО, избыточно - юзеру вряд ли захочется вбивать имя продукта полностью.

 

Условие "%строка" тоже избыточно - его полностью перекрывает "%строка%".

 

ОДИН select с двумя (тремя???) LIKE? Ну да, тут от расклада карт может многое зависеть.

 

 А вот ДВА относительно простых селекта с одним LIKE в каждом и объединением results в PHP - самое, ИМХО, то!

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


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

Условие "=", ИМХО, избыточно - юзеру вряд ли захочется вбивать имя продукта полностью.

 

Условие "%строка" тоже избыточно - его полностью перекрывает "%строка%".

 

ОДИН select с двумя (тремя???) LIKE? Ну да, тут от расклада карт может многое зависеть.

 

 А вот ДВА относительно простых селекта с одним LIKE в каждом и объединением results в PHP - самое, ИМХО, то!

Все зависит от товаров. Зачастую важны именно детали.

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


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

Все зависит от товаров. Зачастую важны именно детали.

Согласен. Но ТС не модуль же пишет. Зачем здесь универсальность? 

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


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

Согласен. Но ТС не модуль же пишет. Зачем здесь универсальность? 

Ну ему дали полный набор необходимых форматов выборки, подсказали, как его укоротить, при необходимости. А дальше уже сам выберет.

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


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

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

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

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

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

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

Войти

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

Войти


  • Похожий контент

    • От Romario1609
      Здравствуйте! Я уже проштудировал несколько обсуждений по этой теме, но хотел бы разобраться, почему на нашем сайте не работает поиск при нажатии enter.
       
      <div id="search" class="input-group input">   <input type="text" name="search" value="<?php echo $search; ?>" placeholder="<?php echo $text_search; ?>" class="form-control input-lg" />   <span class="input-group-btn">     <button type="button" class="btn btn-lg btn-s" id="button-search"><i class="fa fa-search"></i></button>   </span> </div>  
      Это код поиска из search.tpl, а далее будет кусок кода из common.js:

       
      /* Search */     $('#search input[name=\'search\']').parent().find('button').on('click', function() {         var url = $('base').attr('href') + 'index.php?route=product/search';         var value = $('header #search input[name=\'search\']').val();         if (value) {             url += '&search=' + encodeURIComponent(value);         }         location = url;     });     $('#search input[name=\'search\']').on('keydown', function(e) {         if (e.keyCode == 13) {             $('header #search input[name=\'search\']').parent().find('button').trigger('click');         }     });  
    • От Anzor
      Привет! Никак не найду модуль, умеющий скрывать товары из определенной категории из поиска - то есть все товары, помещаемые в конкретно определенную категорию не должны отображаться на сайте и не должны находиться в поиске сайта. Нашел такой функционал для старых версий, для 2.3 на форуме нет.
    • От magzhan9292

      300 RUB
      View File


      Noticeup Livesearch
      Модуль для создание живого, красивого, быстрого, удобного поиска на сайте.
       
      Модуль Noticeup Livesearch позволяет моментально выводить результаты прямо в поисковой строке. Модуль создан с помощью тщательно проверенных плагина jquery что является плюсом, зашкаливает кросбраузерность, также имеется кэширование запросов что влияет на быстроту. Модуль использует модификаторы (лёгкая и безопасная установка), что исключает поломку или сбой системы после установки.
       
      Можно
      Выводить фото, наименования, модель, производителей, цен Указать с какого символа начнется поиск элементов Указать количество элементов в поиске Сгруппировывать по производителям Так же легко можно поменять дизайн выводимых элементов по своему вкусу (путь указан в дополнении)  
      Установка
      зайти в Панель управления -> Модули -> Установка расширений установить модуль перейти в Панель управления -> Модули -> Модификаторы обновить и активировать модификатор Активируйте модуль если того требует система Модуль совместим со всеми темами по-умолчанию (при возникновении трудностей с установкой напишите нам и мы обязательно поможем)
       
      Тестировался на версии
      Opencart 3.0.2.0 Opencart 2.3.0.2 Opencart 2.2.0.0 Opencart 2.1.0.1 Opencart 2.0.1.0 Ocstore 2.3.0.2  
      Демо версию можно увидеть через ссылку ниже
      http://livesearch.365day.kz/
       
      Администраторская 
      http://livesearch.365day.kz/admin/index.php?route=module/noticeuplivesearch
      demo
      demo
       
      Обсуждения проекта находиться здесь
       
      Submitter magzhan9292 Submitted 11/19/2017 Category Search Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От magzhan9292
      Модуль для создание живого, красивого, быстрого, удобного поиска на сайте.
       
      Модуль Noticeup Livesearch позволяет моментально выводить результаты прямо в поисковой строке. Модуль создан с помощью тщательно проверенных плагина jquery что является плюсом, зашкаливает кросбраузерность, также имеется кэширование запросов что влияет на быстроту. Модуль использует модификаторы (лёгкая и безопасная установка), что исключает поломку или сбой системы после установки.
       
      Можно
      Выводить фото, наименования, модель, производителей, цен Указать с какого символа начнется поиск элементов Указать количество элементов в поиске Сгруппировывать по производителям Так же легко можно поменять дизайн выводимых элементов по своему вкусу (путь указан в дополнении)  
      Установка
      зайти в Панель управления -> Модули -> Установка расширений установить модуль перейти в Панель управления -> Модули -> Модификаторы обновить и активировать модификатор Активируйте модуль если того требует система Модуль совместим со всеми темами по-умолчанию (при возникновении трудностей с установкой напишите нам и мы обязательно поможем)
       
      Тестировался на версии
      Opencart 3.0.2.0 Opencart 2.3.0.2 Opencart 2.2.0.0 Opencart 2.1.0.1 Opencart 2.0.1.0 Ocstore 2.3.0.2  
      Демо версию можно увидеть через ссылку ниже
      http://livesearch.365day.kz/
       
      Администраторская 
      http://livesearch.365day.kz/admin/index.php?route=module/noticeuplivesearch
      demo
      demo
       
      Обсуждения проекта находиться здесь
       
    • От TemaPerets
      На сайте в названии товаров присутствует знак "\", например, Настенный кондиционер Green GRI\GRO - 07 HH1. При вбивании в строку поиска этой части GRI\GRO выдает сообщение "Нет товаров, которые соответствуют критериям поиска."  Поиск не изменял, доп. модулей для поиска не установлено, версия OpenCart Pro 2.1.0.2.2.
      P.S. Напишите, пожалуйста, хотя бы с чего начать)
  • Последние посетители   0 пользователей онлайн

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