Поиск и расширенный поиск на сайте

Тема в разделе "Boxcode", создана пользователем Молния, 18 июн 2017.

  1. Молния

    Молния Постоялец

    Регистр.:
    7 сен 2015
    Сообщения:
    130
    Симпатии:
    11
    Интересует такой момент в версии 8.4.
    1. При поиске статьи по заголовку, если вводить запрос из одного слова.
    Например: "снегоочиститель", то выводит три статьи с заголовками:
    • Плужный снегоочиститель
    • Снегозадержатели на крышу
    • Активный очиститель пятен
    Стало быть, в расширенном поиске отсутствует функция "поиск по точному совпадению"

    2. При поиске статьи по заголовку, если вводить запрос из нескольких слов.
    Например: "Плужный снегоочиститель", то выводит все статьи имеющиеся в каталоге, при этом на странице появляется подсказка "В запросе имеется короткое слово (длина меньше 3 букв). При поиске не был учтен текст."

    Тут явно какая-то неисправность. Целых 2 слова, а ругается на то, что всего 3 буквы.

    По пункту 1, необходимо добавить функцию поиска по точному совпадению и чек-бокс к форме поиска.
    По пункту 2, необходимо исправить.
    Пожалуйста, не пишите пространные рассуждения. Желательно готовое решение или хотя бы, что-то вразумительное.
     
  2. sarkis

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    248
    Симпатии:
    35
    1. у вас явно что-то не так с поиском: т.к по вашему слову не может быть в списке допустимых значений из второго и третьего варианта ( поиск в движке происходит по вхождению искомого слова) .
    2. Аналогично и с этим пунктом : либо что-то путаете либо поиск неисправен

    В любом случае, можете файлы поиска статей moduls\article\filesmodul\search\ заменить на базовые
     

    Вложения:

  3. Молния

    Молния Постоялец

    Регистр.:
    7 сен 2015
    Сообщения:
    130
    Симпатии:
    11
    Заменила оба файла на ваши, но правда поиск стал работать как надо только в пункте 1. Но всё равно спасибо.
    По пункту 2, ситуация прежняя. И ещё поняла вот что.
    Подсказка "В запросе имеется короткое слово (длина меньше 3 букв). При поиске не был учтен текст." появляется, когда в поисковом запросе присутствует "предлог", к примеру такие словосочетания - "Специалист по программированию" или "Архитектура и дизайн". Т.е когда в искомой ключевой фразе находятся что-то из одной-двух букв, то выводит в список все статьи, так как в содержимом также присутствуют эти самые "предлоги".
    Получается, что в базовом поисковике не предусмотрен поиск конкретно по заголовку и он осуществляется по всему содержимому.
    Исходя из этого, два вопроса.
    1. Как избавиться от "длина меньше 3 букв", чтобы если написано "Рога и копыта", то искал только так, если нет такого словосочетания, тогда выдавал к примеру - "Точное совпадение не найдено". Т.е осуществлялся поиск по точному совпадению введённой фразы, а не вырывал буквы из контекста.
    2. Каким образом, пользователь добавляющий статью сможет проверить с помощью поиска уникальность своего заголовка, что такой не использовался ранее на этом ресурсе. Т.е. необходим фильтр, "Поиск по заголовку" и "Поиск по содержимому".
    Как эти 2 пункта реализовать?
     
  4. sarkis

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    248
    Симпатии:
    35
    Работа поиска в движке осуществляет по принципу разделения строки на слова. Соответственно "Рога и копыта" делится на три отдельных слова, которые ищутся по отдельности .
    Поиск работает по названию, короткому и длинному тексту !

    В админке есть параметр, который регулирует мин.длину запроса . 3 - по - умолчанию , но если поставите 1, будут учитываться предлоги, но не гарантия , что будет работать , т.к хостинг может ставить лимиты на такие запросы + не целесообразно при таком поиске учитывать 1 букву, т.к будет очень много левых вариантов !

    Если с кодом знакомы, то можете делать пару вариантов :

    1. в control_data.php убирайте разбор запроса
    Код:
           foreach ($mas_words as $word)
             {
              $q_like.=$raz." short_text LIKE '%".$word."%' OR name_item LIKE '%".$word."%' OR all_text LIKE '%".$word."%' ";
              $raz=" OR ";
              if (mb_strlen($word) < MIN_LENGTH_WORD_ARTICLE) $is_min=true;
             }
    и в переменную $q_like ставьте все предложение

    2. Смотрите в сторону полнотекстовых индексов и поиску по ним !