Donate

Я с удовольствием и благодарностью приму маленькие пожертвования.

Подробнее »

Рекомендую

Как сделать поиск на сайте?

g95TrhI.jpg

Недавно мне потребовалось сделать поиск для нашего замечательного сообщества "phpland". На выбор у меня было минимум три варианта, именно о них я бы и хотел поговорить в этой статье.

Вариант 1: Добавить простую форму, которая будет пересылать запрос на страницу поисковой системы

Выглядит это примерно так:

<form action="http://google.com/search" name="search-form" target="_blank">
    <input type="hidden" name="q" value="site:https://phpland.org" />
    <input name="q" value="" />
    <input type=submit value="Найти" />
</form>

Посмотреть результат можно в песочнице "Codepen": https://codepen.io/phpland/pen/BPXrJG

Мы заполняем форму (которая состоит из одного поля и кнопки отправить) на нашем сайте и отправляем её методом GET на сайт Google/Yandex, который принимает данные и показывает нам результаты, которые он нашел на странице поисковой системы. Благодаря скрытому input мы можем сказать поисковой системе, что искать нужно только на нашем сайте, а не по всему интернету. Такой вариант работает при условии, что поисковая система уже проиндексировала наш сайт и находит у себя наши страницы.


Вариант 2: Встроить поиск Yandex или Google на свой сайт

Второй вариант, чем-то похож на первый, однако тут мы уже встраиваем форму (код), которую нам предоставляет поисковая система. В этом примере мы разберём подключение Yandex поиска, потому как его можно именно встроить в свой сайт и в нём насколько я мог заметить нету рекламы.

Для начало нам нужно перейти на сайт https://site.yandex.ru/searches/ (зарегистрироваться) и нажать кнопку "Добавить поиск".

После этого заполнить поле "Техническое название поиска" (например "phpland"), указать "Область поиска" (https://phpland.org).

Далее перейти в левом меню по ссылке "Результаты поиска" и выбрать "Показывать результаты на моей странице", здесь нужно указать страницу, на которой будет отображаться результат поиска, например /search.php.

Далее нужно перейти в левом меню по ссылки "Код для вставки на сайт" и скопировать код формы поиска и разместить его там, где вы хотите чтобы находился ваш поиск. Можно прям на странице /search.php.

Далее нужно скопировать код результатов поиска и вставить его в том месте, где вы хотите чтобы отображались результаты поиска, например на странице /search.php.

Теперь если мы перейдём на нашу страницу /search.php, то должны увидеть форму поиска и если мы введём какое не будь ключевое слово, то увидим ниже результаты поиска.

Посмотреть результат можно на нашем сайте сообщества, перейдя по ссылке https://phpland.org/search

При желание можно настроить внешний вид формы на сайте Яндекса и/или просто перезаписать CSS стили.

Примерно также работает и поиск Google: https://cse.google.com


Вариант 3: Написать свой поиск на PHP

Разобрать этот вариант в рамках одной статьи будет весьма сложно, поэтому оставим этот вариант на будущее, если будет интерес. В целом это работает примерно как вариант 1, только форма отправляется на наш сайт, где мы принимаем GET запрос и находим нужные данные например в базе данных и потом распечатываем результат поиска на экран.


Каждый из вариантов имеют свои плюсы и минусы.

Лично я не вижу смысла писать свой поиск на PHP для большинства случаев (если сайт индексируется поисковыми системами), хотя уже не раз приходилось делать это. Почему? Потому что написать хороший поиск, который будет не просто искать точное совпадение, но будет учитывать разные параметры (способы написания, синонимы, и т.д.) займёт у нас много времени, которое мы можем потратить на более важные вещи в жизни. Однако это хорошая задача, для тех, кто хочет научиться программировать на PHP и повысить свой скилл... :-)

Для себя я выбрал второй вариант, так как он для меня подошел больше всего, а какой вариант выбрали вы?


У вас включён блокировщик рекламы (Adblocker, Adblocker Plus, uBlock).
Если вы хотите поддержать автора данного поста, пожалуйста выключите его!

Порекомендуйте эту статью друзьям:

Оставьте комментарий!

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий:

  • Eugene
    Eugene написал(а):

    Я слышал про эластик серч и сфинкс, вот если бы вы сделали обзор! А так, второй вариант вроде бы годный :)

    • Petjan
      Petjan написал(а):

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

    • dignity
      dignity написал(а):

      "Elasticsearch" и "Sphinx" действительно крутые штуки, но как сказал Petjan они действительно требуют достаточно много времени на изучения и потребляют значительные ресурсы сервера. Пока мне не приходилось с ними работать, но возможно в будущем придётся и тогда я обязательно поделюсь своими знаниями :)

  • Денис Скрипник
    Денис Скрипник написал(а):

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

    По поводу поиска по сайту - придётся заморочиться. Одно время делал на практике ради интереса склоняемость слов, но в случае с поиском на уровне сайта придётся ещё делать таблицу синонимов в базе данных, а также смотреть варианты склонения через тот метод, которым пользовался. Уже не помню, как это делал, так как было 3 месяца назад. Но в файлах это всё есть - если понадобится, задействую в новом проекте.

    Я понимаю работу поиска так:

    1. Человек вводит в форму запрос;
    2. Он отправляется на сервер, где скрипт добавляет в массив введённый вариант + все склонения;
    3. Все эти элементы массива при помощи foreach и условия сравниваются с элементами в таблице синонимов. Если слово найдено, смотрятся его синонимы и добавляются в массив. Кстати, массивов несколько: по одному на каждое слово из запроса.
    4. Далее производится перемешивание всех слов из всех массивов так, чтобы были охвачены все варианты, после чего с ними производится поиск в базе данных или где ещё.

    Но это будет занимать достаточно большое время, поэтому нужно будет кеширование запросов, дабы каждый раз не делать синонимизацию и не перемешивать слова. А если проект популярный очень, и результатов.

    Перемешивание нужно, так как человек может ввести как "красивый дом", так и "дом красивый". А сервис ещё должен подобрать синонимы, типа "здание" и просклонять каждое: "красивый здание", "здание красивый", "красивое здание", "здание красивое", "красивые здание", "здание красивые" ...

    • dignity
      dignity написал(а):

      Денис, спасибо за полезный комментарий. Ты лучше меня объяснил алгоритм поиска :-)


Написать новый комментарий