Перейти к содержимому

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

  • автор:

Как искать слово на странице в браузере

Как искать слово на странице в браузере

Порой при просмотре какой-либо веб-страницы нужно отыскать определённое слово или фразу. Все популярные браузеры оснащены функцией, которая производит поиск в тексте и выделяет совпадения. Этот урок покажет Вам, как вызвать панель поиска и как ею пользоваться.

Как проводить поиск по интернет-странице

Следующая инструкция поможет быстро открыть поиск с помощью горячих клавиш в известных браузерах, среди которых Opera, Google Chrome, Internet Explorer, Mozilla Firefox.

С помощью клавиш клавиатуры

Открытие поиска

  1. Переходим на страницу нужного нам сайта и нажимаем одновременно две кнопки «Ctrl+F» (в Mac OS – «Сmd+F»), другой вариант – нажать «F3».
  2. Появится небольшое окошко, которое находится вверху либо внизу страницы. В нём есть поле для ввода, навигация (кнопки назад и вперёд) и кнопка, которая закрывает панель.

Вот так с помощью нескольких клавиш можно с лёгкостью найти на веб-странице интересующий текст, при этом не читая всю информацию со страницы.

Еще статьи по данной теме:

Помогла ли Вам статья?

что сделать чтобы эта панель не выскакивала автоматически когда я жму f3? не могу прибавить звук

К сожалению, никак. Изменять или полностью убирать стандартные сочетания клавиш, установленные в браузере, не получится.

так можно осуществлять поиск в пределах страницы. А как искать по документу который представлен на нескольких страницах и нет возможности их скачать?

Если на сайте нет внутреннего расширенного поиска, остается только последовательно переходить на каждую страницу и искать нужное слово.

Нужно изменить настройки, чтобы текст можно было искать по факту набора, без нажатия на F3 и другие сочетания. Есть решения?

Здравствуйте, Octavian. Такой возможности в браузерах нет, есть только стандартный поиск, к которому нужно обращаться повторно (F3 или CTRL+F) после каждого обращения к содержимому страницы.

Как сделать строгий поиск ?
(чтобы совпадал регистр букв + их количество, ввел например слово «дом» и нашел только «дом», другие слова Дом, дома, домашний и тд не берутся)

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

Единственное, что наверняка сработает (правда, только в некоторых случаях) — это добавление в строке поиска пробела до и после искомого слова (ну или только с одной стороны), тогда однокоренные и прочие похожие слова точно не будут найдены. Однако не будут найдены и слова из Вашего примера — например, «дом» в кавычках или дом, с запятой.

Инструменты для получения страниц сайта с нужным словом или словосочетанием

Руслан Шкарбан — автор статьиРуслан Шкарбан

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

Поисковые операторы

В поисковых системах есть специальные символы, слова и фразы для конкретизации запроса, они называются поисковыми операторами. Операторов большое количество, ознакомиться с ними можно в документации используемого поисковика: Яндекса или Google.

Нас интересует оператор, который позволяет найти нужное словосочетание в пределах одного сайта, — site:.

Используется он так: site: доменное_имя.ru нужное слово.

Обратите внимание, что для того, чтобы найти упоминания конкретной фразы ее нужно выделить в кавычки. Без кавычек поисковик покажет все похожие вхождения.

Работоспособность данного оператора проверим через поисковые системы Google и Яндекс.

Использование оператора site: в Google

Для примера взяли сайт бюро переводов ТранЭкспресс и попытались найти на нем несколько фраз. Одна из них — “подсчет слов”.

Чтобы проиллюстрировать пример точных вхождений и всех схожих фраз мы поочередно вставляем в поисковую строку:

  • site:https://www.tran-express.ru/ подсчет слов;
  • site:https://www.tran-express.ru/ «подсчет слов».

Google выдал список страниц сайта, на которых встречается эта фраза.

site:https://www.tran-express.ru/ подсчет слов

Поиск в гугле первой фразы без кавычек

site:https://www.tran-express.ru/ «подсчет слов»

Поиск в гугле первой фразы с кавычками

Следующее словосочетание, которое мы пытались найти, — «примеры перевода».

site:https://www.tran-express.ru/ примеры перевода

Поиск в гугле второй фразы без кавычек

site:https://www.tran-express.ru/ «примеры перевода»

Поиск в гугле второй фразы с кавычками

Изучив поисковую выдачу Google, рассмотрим, что выдаст Яндекс.

Использование оператора site: в Яндекс.

Для проверки работоспособности поискового оператора в Яндексе будем искать такие же фразы, что и в гугле.

site:https://www.tran-express.ru/ подсчет слов

Поиск в яндексе первой фразы без кавычек

site:https://www.tran-express.ru/ «подсчет слов»

Поиск в яндексе первой фразы с кавычками

Проверяем вторую фразу.

site:https://www.tran-express.ru/ «подсчет слов»

Поиск в яндексе второй фразы с кавычками

site:https://www.tran-express.ru/ «подсчет слов»

Поиск в яндексе второй фразы с кавычками

Использовать этот подход рационально, если нужно:

  • проверить, отображаются ли конкретные страницы в поиске;
  • оперативно получить страницы с использованием конкретной фразы;
  • найти определенную информацию на одной-двух страницах.

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

Использование парсеров

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

Мы пользуемся SiteAnalyzer — программой для SEO-аудита. SiteAnalyzer — бесплатный сервис, но для незарегистрированных на сайте пользователей есть несколько ограничений. Например, если на сайте больше 500 страниц, программа все равно покажет только 500. Поэтому советуем зарегистрироваться и расширить ее возможности.

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

Шаг 1. Получение информации о сайте

Нужно получить список всех страниц. Для этого открываем SiteAnalyzer и вставляем урл сайта. Затем нажимаем на кнопку «Старт». Запускается проверка сайта, длительность зависит от количества страниц на нем.

Начинаем парсинг через сайтаналайзер

После проверки вкладки программы заполняются информацией: всеми ссылками с сайта, временем отклика страниц, SEO-информацией и другими данными. Подробно прочитать о каждой из вкладок можно в документации SiteAnalayzer.

В редких случаях парсинг может не получится. Причины у этого могут быть разные. Например, установлена защита на хостинге. Если вы столкнулись с тем, что сайт не парсится, попробуйте сменить User-Agent в SiteAnalayzer.

User-Agent — это строка, которую браузер, а в нашем случае парсер, отправляет на сервер при запросе веб-страниц. Она содержит информацию об операционной системе, браузере и другие данные.

Чтобы сменить User-Agent, перейдите в настройки, далее кликните на «User-Agent» и выберите YandexBot или GoogleBot. После этого повторите парсинг.

Настройки SiteAnalayzer Смена User-Agent если не работает парсинг

Если парсинг прошел успешно и вы получили основную информацию о сайте, переходим к следующему шагу — поиску интересующей фразы. Для этого переходим во вкладку “Извлечение данных”.

Отображение информации после тестового парсинга

Если добавлены правила для поиска, в графе «Результаты» выводится количество. Мы не задали ни одного правила, поэтому столбец пустой.

Информация со вкладки извлечения данных

Перейдем к этапу внесения правил.

Шаг 2. Правила для извлечения данных

Кратко рассмотрим, как работает поиск нужных нам данных. Этот процесс называется веб-скрейпинг и включает в себя автоматизированное извлечение данных со страниц веб-сайта по установленным правилам.

Формулировка правил основывается на способах разбора данных:

  • XPath. Язык запросов в формате XML/XHTML. Доступ к содержимому, которое ищем, происходит благодаря навигации по DOM (Document Object Model — структура веб-страницы, позволяющая программам взаимодействовать с содержимым, внешним отображением и структурой) через описание пути к нужному элементу. Работа схожа с навигацией в операционных системах, когда мы ищем какой-то файл, находящийся в одной из папок. На примере сайта выглядит так: div->div->p: мы ищем элемент p, который является дочерним у div, который также дочерний для другого div. В формате выражения: //div/div/p.
  • XQuery. В основе работы лежит XPath.
  • CSSPath. CSS-селекторы cинтаксически имеют сходство с XPath (разница в скорости и лаконичности). Но в отличие от XPath CSS-селекторы работают только вглубь документа. Для поиска используются: элементы, CSS-классы (псевдоклассы и псевдоэлементы тоже), идентификаторы, атрибуты, потомки и дочерние элементы. Также допускается создание комбинаций из перечисленных элементов для более точного поиска.
  • HTML Templates. Язык для извлечения данных из HTML документа. Представляет собой комбинацию HTML для описания шаблона поиска нужного фрагмента.
  • RegExp (RegEx) — формальный язык регулярных выражений для поиска информации в большом количестве текста.

Посмотреть примеры правил можно в документации SiteAnalayzer.

Мы хотим найти словосочетание “подсчет слов”. Для этого воспользуемся методом RegExp. Его выбор объясняется тем, что мы не знаем, в каких HTML тегах данное словосочетание может встречаться. По этой же причине отказываемся от поиска через CSS селекторы.

Чтобы найти фразу, необходимо составить регулярное выражение. Это можно сделать самостоятельно, прочитав документацию. Но самым простым вариантом является использование RegExp генератора. В данном случае правило является абсолютно идентичным искомому тексту.

RegExp можно использовать и для поиска отдельных HTML тегов. Также он позволяет исключать из поиска отдельные элементы, для этого нужна конструкция: [^исключение] — в квадратных скобках указывается искомый элемент, а ^ означает исключение. Правилом [^0-9] мы исключаем из поиска все цифры.

Генератор RegEx

Возвращаемся к SiteAnalyzer и выбираем на верхней панели “Проекты”, в открывшемся окне нажимаем “Настройки”.

Настройки SiteAnalayzer

Добавляем название правила. Оно может быть любым, но для наглядности лучше использовать формулировку самого правила. Выбираем RegExp и вносим правило. Важно поставить галочку у “Правила извлечения данных”.

Ввод правила SiteAnalayzer

Сохраняем и возвращаемся на вкладку “Извлечение данных”. Мы добавили одно правило, появилась дополнительная графа с ним. Нажимаем “Старт” и запускаем проверку.

Парсинг через SiteAnalayzer

В нашем случае поиск осуществляется только по форме фразы “подсчет слов”. Если нужно найти и другие варианты этого словосочетания, потребуется добавить дополнительные правила.

Наш опыт использования

Мы уже упоминали, что можно искать не только слова, но и отдельные элементы на сайте. Например, на сайте lenwood.ru недавно было необходимо найти CSS класс: “wrapper-calculator-block”.

Для решения данной задачи мы можем воспользоваться XPath и CSSPath, первый вариант приведен в документации Site-analyzer.

Получение элементов с использованием Xpath

Рассмотрим вариант с XPath с правилом: //div[@class=»wrapper-calculator-block»]. Так мы получим все элементы div, у которых есть класс «wrapper-calculator-block».

Лайфхак: получать готовые правила XPath мы можем прямо со страницы. Для этого нужно нажать cочетание клавиш «Ctrl» + «Shift» + «С». Откроется консоль разработчика, а элементы на странице будут подсвечены. Наводим курсор на нужный элемент и опускаемся в консоль, кликаем правой кнопкой мыши по элементу, выбираем «Копировать», «Копировать XPath».

Копируем Xpath

Имейте в виду, что получить правило таким образом получится не всегда. Зависит от настроек сайта. Например, мы работаем с одним из сайтов, который при копировании Xpath добавляет к правилу айди данной страницы: //*[@id=»post-1798″]/section/section[2]/div/div[2]/blockquote. Данный функционал настраивается в шаблоне сайта и используется для удобства, например, при работе с элементами через JavaScript. Но для парсинга такой вариант не подходит.

Добавляем полученное правило в SiteAnalayzer и запустили проверку.

Будьте внимательны, если в вашем правиле находится лишний пробел или другой символ, то оно не сработает.

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

В дополнительной графе появились результаты поиска.

Получение элементов с использованием CSSPath

Воспользуемся CSSPath. Для поиска нужного нам элемента нам подойдет правило: div[class=wrapper-calculator-block]. Заносим его в настройках и запускаем парсинг

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

По окончанию парсинга мы получили аналогичный результат.

На данных примерах видно, что найти нужный элемент на сайте можно несколькими способами. Документация для поиска предлагает использовать XPath, мы используем CSSPath. Свой выбор мы аргументируем тем, что XPath является мощным инструментом для поиска, он позволяет искать по текстовому содержимому элементов, позициям и использовать логические условия. CSSPath таких функций не имеет, он ограничен элементами, классами, идентификаторами и находиться в строгой зависимости от их иерархии.

Используя парсеры, повышайте продуктивность

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

Рекомендуем при выборе инструмента отталкиваться от целесообразности его использования. Если у вас сайт на 10 страниц и вы понимаете, что нужный элемент встречается в 2-3 местах, то проще будет воспользоваться поисковыми операторами, а если работаете с интернет магазином на 1000 страниц, то без специальных программ тут не обойтись.

31 Search Form HTML For Web Design

Niemvuilaptrinh

Search component is an important component in the website. It makes it easy for users to find the content they want in your website. In today’s post, we’ll take a look at some beautiful Simple search box HTML.

Stylish search box in HTML

You can see the result below.

CSS Search Box With Icon

You can see the result below.

Stylish Search Box In HTML CSS Code

You can see the result below.

Search Box HTML CSS

You can see the result below.

Search Box HTML Code Design

You can see the result below.

Simple Search Box HTML

You can see the result below.

CSS Search Bar Styling

You can see the result below.

Responsive Search Bar

You can see the result below.

Responsive search bar CSS

You can see the result below.

Simple search box CSS

You can see the result below.

Search Form Style CSS

You can see the result below.

CSS Search Box Examples

You can see the result below.

Animated Search Bar

You can see the result below.

Search Box By Scene.js

You can see the result below.

Rounded Search Bar HTML

You can see the result below.

Search Input CSS

You can see the result below.

Input Type Search CSS

You can see the result below.

Input With Search Icon CSS

You can see the result below.

Search Icon In Input Field

You can see the result below.

Custom Search Bar HTML

You can see the result below.

Search Bar For Website HTML

You can see the result below.

Search Bar Design

You can see the result below.

Transparent search bar CSS

You can see the result below.

Bootstrap Search Box With Icon

You can see the result below.

Website Search Bar Design

You can see the result below.

Search Box With Icon Inside

You can see the result below.

Bootstrap Search Box With Icon Inside

You can see the result below.

Javascript Search Box

You can see the result below.

Animation Search Bar By GSAP

You can see the result below.

Search Bar HTML Template

You can see the result below.

Search bar template HTML CSS

You can see the result below.

Summary

I hope the article will provide you with useful Responsive search bar for web development and if you have any questions, just send an email and I will respond as soon as possible. I hope you continue to support the site so that I can write more good articles. Have a nice day!

Поиск на сайте своими руками

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

У читателя может возникнуть вопрос: зачем писать все с нуля, если все уже давно написано? Да, у крупных поисковиков есть API, есть такие клевые проекты, как Sphinx и Apache Solr. Но у каждого из этих решений есть свои преимущества и недостатки. Пользуясь услугами поисковиков, типа Google и Яндекс, Вы получите множество плюшек, таких как мощный морфологический анализ, исправление опечаток и ошибок в запросе, распознавание неверной раскладки клавиатуры, однако без ложки дегтя тут не обойдется. Во первых, такой поиск не интегрируется в структуру сайта — он внешний, и Вы не сможете указать ему, какие данные наиболее важны, а какие не очень. Во вторых, содержимое сайта индексируется только с определенным интервалом, который зависит от выбранного поисковика, так что если на сайте что-нибудь обновится, придется дожидаться момента, когда эти изменения попадут в индекс и станут доступными в поиске. У Sphinx и Apache Solr дела с интеграцией и индексированием гораздо лучше, но не каждый хостинг позволит из запустить.

Ничто не мешает написать поисковый механизм самостоятельно. Предполагается, что сайт работает на PHP в связке с каким-нибудь сервером баз данных, например MySQL. Давайте сначала определимся, что требуется от поиска на сайте?

  • Поиск с учетом языковой морфологии. Независимо от падежа, окончания и
    других прелестей великого и могучего языка поиск должен находить то, что нужно
    пользователю. Другими словами, «яблок», «яблока», «яблоки» — это формы одного и того
    же слова «яблоко», что нужно учитывать в поисковом алгоритме. Одним из способов
    достижения данной цели является приведение каждого слова поискового запроса и слов
    содержимого сайта к базовой форме.
  • Возможность указать контекст поиска. То есть, возможность самостоятельно выбрать
    контент сайта, в пределах которого будет работать поисковый алгоритм, а также определить
    значимость для каждого из пределов. Например, рассмотрим интернет-магазин. Предполагается,
    что поисковый запрос чаще всего будет содержать название искомой продукции, поэтому поиск по
    названиям товара будет иметь наивысший приоритет. В качестве следующего приоритета можно
    выбрать поиск по свойствам товаров, затем поиск по описанию.
  • Индексирование содержимого сайта. Представьте ситуацию: одновременно около 30 человек
    выполняют поисковые запросы. Сервер принимает каждое соединение, управление потоком
    передается интерпретатору PHP. При каждом запросе заново инициализируется поисковый
    движок, заново перерывается содержимое сайта… Сложно сказать, сколько времени и
    ресурсов потребуется, чтобы обработать все эти запросы. Именно для того, чтобы не
    делать одну и ту же работу по сто раз, была придумана технология индексирования.
    Индексирование выполняется только при изменении или добавлении содержимого сайта,
    а поиск выполняется уже по индексу, а не по содержимому.
  • Механизм ранжирования. Ранжирование результатов поиска — это сортировка результатов поиска, выполняемая на основе оценки значимости найденных данных. Например, в каком-нибудь блоге выполняется поисковый запрос «космос». Данное слово содержится в двух статьях: в первой 16 раз, во второй — 5 раз. Вероятнее всего, первая статья будет иметь большее значение для инициатора поиска. Также каждой разновидности содержимого сайта при индексировании задается определенный коэффициент, который будет влиять на его позиции в поисковой выдаче.
  • морфологический анализатор,
  • алгоритм ранжирования,
  • алгоритм индексирования,
  • алгоритм поиска.

В конце статьи будет показан пример реализации поиска на примере простого интернет-магазина. Тем, кому лень все это изучать и просто нужен готовый поисковик, можно смело забирать движок из репозитория GitHub FireWind.

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

Задача поставлена, теперь можно перейти к делу. Я использую Linux в качестве рабочей ОС, однако постараюсь не использовать ее экзотических возможностей, чтобы любители Windows смогли «собрать» поисковый движок по аналогии. Все, что Вам нужно — это знание основ PHP и умение обращаться с MySQL. Поехали!

Наш проект будет состоять из ядра, где будут собраны все жизненно необходимые функции, а также модуля морфологического анализа и обработки текста. Для начала создадим корневую папку проекта firewind, а в ней создадим файл core.php — он и будет ядром.

Теперь вооружаемся своим любимым текстовым редактором и подготавливаем каркас:

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

Морфологический анализатор

Русский язык — довольно сложная штука, которая радует своим разнообразием и шокирует иностранцев конструкциями, типа «да нет, наверное». Научить машину понимать его, да и любой другой язык, — довольно непростая задача. Наиболее успешны в этом плане поисковые компании, типа Google и Яндекс, которые постоянно улучшают свои алгоритмы и держат их в секрете. Придется нам сделать что-то свое, попроще. К счастью, колесо изобретать не придется — все уже сделано за нас. Встречайте, phpMorphy — морфологический анализатор, поддерживающий русский, английский и немецкий языки. Более подробную информацию можно получить тут, однако нас интересуют только две его возможности: лемматизация, то есть получение базовой формы слова, и получение грамматической информации о слове (род, число, падеж, часть речи и т.д.).

Нужна библиотека и словарь для нее. Все это добро можно найти тут. Библиотека находится в одноименной папке «phpmorphy», словари расположены в «phpmorphy-dictionaries». Скачиваем последние версии в корневую папку проекта и распаковываем:

Отлично! Библиотека готова к использованию. Пришло время написать «оболочку», которая абстрагирует работу с phpMorphy. Для этого создадим еще один файл morphyus.php в корневой директории:

Пока реализовано только два метода. get_words разбивает текст на массив слов, фильтруя при этом HTML-теги и сущности типа « ». Метод lemmatize возвращает массив лемм слова, либо false, если таковых не нашлось.

Механизм ранжирования на уровне морфологии

Давайте остановимся на такой единице языка, как предложение. Наиболее важной частью предложения является основа в виде подлежащего и/или сказуемого. Чаще всего подлежащее выражается существительным, а сказуемое глаголом. Второстепенные члены в основном употребляются для уточнения смысла основы. В разных предложениях одни и те же части речи порой имеют совершенно разное значение, и наиболее точно оценить это значение в контексте текста сегодня может только человек. Однако программно оценить значение какого-либо слова все-таки можно, хоть и не так точно. При этом алгоритм ранжирования должен опираться на так называемый профиль текста, который определяется его автором. Профиль представляет из себя ассоциативный массив, ключами которого являются части речи, а значениями соответственно ранг (или вес) каждой из них. Пример профиля я покажу в заключении, а пока попробуем перевести эти размышления на язык PHP, добавив еще один метод к классу morphyus:

Индексирование содержимого сайта

Как уже говорилось выше, индексирование заметно ускоряет выполнение поискового запроса, так как поисковому движку не нужно обрабатывать контент каждый раз заново — поиск выполняется по индексу. Но что же все-таки происходит при индексировании? Если по порядку, то:

  • Сначала из текста формируется массив слов, и делается это с помощью метода get_words.
  • Согласно профилю, из текста отбрасываются незначимые части речи.
  • Значимые оцениваются по пятибальной шкале, с помощью метода weigh.
  • Для каждого сова выполняется поиск лемм, иначе говоря базовых форм.
  • Рассчитывается количество повторений каждого слова и суммарный ранг.
  • Все данные записываются в объект и в виде JSON записываются в базу данных.

В результате получается объект следующего формата:

Пишем инициализатор и первый метод ядра поискового движка:

Теперь при добавлении или изменении данных в таблицах достаточно просто вызвать данную функцию, чтобы проиндексировать их, но это не обязательно: индексирование может быть и отложенным. Первым аргументом метода make_index является исходный текст, вторым — коэффициент значимости индексируемых данных. Ранг каждого слова, кстати, расчитывается по формуле:

Хранение индексированных данных

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

Нерешенным остался лишь вопрос формата индексированного содержимого, ведь make_index возвращает объект, и так просто в базу данных или файл его не запишешь. Можно использовать JSON и хранить его в полях типа LONGTEXT, можно BSON или CBOR, используя тип данных LONGBLOB. Два последних формата позволяют представлять данные в более компактном виде, чем первый.

Как говорится, «хозяин — барин», так-что решать, где и как все будет храниться, Вам.

Benchmark

Давайте проверим, что у нас получилось. Я взял текст своей любимой статьи «Темная материя интернета», а именно содержимое узла #content html_format и сохранил его в отдельный файл.

На моей машине с конфигурацией:
CPU: Intel Core i7-4510U @ 2.00GHz, 4M Cache
RAM: 2×4096 Mb
OS: Ubuntu 14.04.1 LTS, x64
PHP: 5.5.9-1ubuntu4.5

Индексирование заняло около секунды:

Думаю, вполне неплохой результат.

Реализация поиска

Остался последний и самый главный метод, метод поиска. В качестве первого аргумента метод принимает индекс поискового запроса, в качестве второго — индекс содержимого, в котором выполняется поиск. В результате выполнения возвращается суммарный ранг, рассчитанный на основе ранга найденных слов, либо 0, если ничего не нашлось. Это позволит сортировать поисковую выдачу.

Все! Поисковый движок готов к использованию. Но есть одно но… На самом деле это не джин-волшебник, и просто закинув его на свой сайт Вы не получите ничего. Его нужно интегрировать, причем этот процесс во многом зависит от архитектуры Вашего сайта. Рассмотрим этот процесс на примере небольшого интернет магазина.

Реализация поиска на примере интернет-магазина

Допустим, информация о продаваемой продукции хранится в таблице production:

А описание в таблице description:

Поле production.keywords будет содержать индекс ключевых слов продукта, description.index будет содержать индексированное описание. И все это будут храниться в формате JSON.

Вот пример функции добавления нового продукта:

Здесь поисковый механизм был интегрирован в функцию добавления нового продукта магазина. А теперь обработчик поисковых запросов:

Данный сценарий принимает поисковый запрос в виде GET-параметра query и выполняет поиск. В результате выводятся найденные продукты магазина.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://czena.vyvod-iz-zapoya-na-domu-voronezh.ru/