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

Молния

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

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

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

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

sarkis

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

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

Вложения

  • control_data.rar
    2,1 KB · Просмотры: 2
  • forming_data.rar
    2,4 KB · Просмотры: 2

Молния

Постоялец
Регистрация
7 Сен 2015
Сообщения
130
Реакции
11
1. у вас явно что-то не так с поиском: т.к по вашему слову не может быть в списке допустимых значений из второго и третьего варианта ( поиск в движке происходит по вхождению искомого слова) .
2. Аналогично и с этим пунктом : либо что-то путаете либо поиск неисправен

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

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

sarkis

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

В админке есть параметр, который регулирует мин.длину запроса . 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. Смотрите в сторону полнотекстовых индексов и поиску по ним !
 
Сверху