Поисковая система своими руками::Журнал СА 8.2004
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

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

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

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

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

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6229
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6935
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4221
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3010
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3808
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3825
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6319
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3172
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3462
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7279
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10647
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12368
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14000
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9126
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7079
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5389
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4617
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3428
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3158
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3402
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3027
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

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

Архив номеров / 2004 / Выпуск №8 (21) / Поисковая система своими руками

Рубрика: Веб /  Веб-технологии

АНДРЕЙ САПРОНОВ

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

Данная статья о том, как очень просто и быстро настроить службу индексирования (MS Indexing Service) для работы с интернет-сервером IIS (MS Internet Information Services). Рассматриваемые в статье методы и приемы могут быть применены ко всем версиям Windows, начиная c Windows 2000. Эта информация может быть полезна тем, перед кем встала задача организовать поиск по веб-сайту или по файловым серверам в локальной сети.

Очень многим системным администраторам задача организации поиска представляется достаточно сложной. Они считают, что для этого необходимо писать какие-то скрипты, поисковые движки и прочее. Ничего этого не нужно. Для понимания материала (а соответственно для организации поиска) вам понадобятся самые элементарные знания по HTML и функционированию веб-сервера IIS. Почему все так просто. Дело в том, что корпорация Microsoft в составе своих операционных систем имеет стандартное средство для реализации подобных задач – службу индексирования (далее СИ). Эта служба появилась в операционных Windows достаточно давно – начиная с Windows NT 4.0.

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

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

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

Краткое описание службы индексирования

СИ является стандартным компонентом. Основными задачами этой службы являются индексирование и организация поиска в указанных пользователем каталогах.

Параметры службы, включая расположение индексируемых данных, можно указать в консоли управления компьютером, оснастке «Служба индексирования».

По умолчанию служба может индексировать (а следовательно, осуществлять быстрый поиск) следующие виды файлов: HTML, все документы MS Office, сообщения MIME. Этого вполне достаточно для веб-сайта. Однако если вам необходима большая функциональность вашего поисковика, то СИ может индексировать файлы, для которых имеются специальные фильтры (т.н. IFilter). Фильтр представляет собой dll-библиотеку, которая реализует интерфейс IFilter для определенного типа файлов. Вы можете сами разработать подобную программу или же взять готовую. Последних существует достаточно много. Вот некоторые:

СИ позволяет индексировать документы, находящиеся на локальной машине и на любом доступном удаленном узле.

Запросы к СИ могут осуществляться на различном логическом уровне (OLE, ADO, ISAPI расширения) и при помощи различных средств разработки (C++, VB, VBS, JS). В простейшем случае запрос на поиск можно выполнить из оснастки СИ в меню «Опрос каталога».

При помощи оснастки «Производительность» можно оценить (как локально, так и удаленно) работу СИ по множеству параметров. Вот наиболее интересные из них: размер индекса, число активных пользователей, число запросов (рис. 1).

Рисунок 1

Рисунок 1

IIS и Служба индексирования

Буду считать, что у вас установлен и запущен сервер IIS, а СИ настроен на индексацию и поиск нужных вам папок.

По умолчанию CИ индексирует содержимое вашего веб-узла.

Для поиска пользователю, как минимум, необходима форма для ввода запросов (например, как стандартная, показанная выше). Форму для запроса, а вместе с ней и методы доступа к СИ можно реализовать двумя путями: ASP или HTML.

В статье я буду рассматривать второй путь. Причин тому две. Во-первых, он на порядок проще как для понимания, так и для реализации. А во-вторых, очень подробные примеры на ASP имеются в Platform SDK и MSDN.

Кроме того, пример формы и запросов на поиск присутствуют в стандартной поставке IIS: Windows\help\iisHelp\ iis\misc\search.asp и Windows\help\iisHelp\iis\misc\query.asp соответственно. Эти примеры имеют подробные комментарии на русском языке.

В случае с HTML форма будет очень простой и до боли знакомой (рис. 2).

Рисунок 2

Рисунок 2

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

Листинг 1. search.html – форма для ввода запроса пользователя

<HTML>

<HEAD>

    <TITLE>Простая форма для поиска</TITLE>

</HEAD>

<BODY>

    <!--Указываем на ссылку, на вход которой пойдут

    параметры формы… -->

    <FORM ACTION="search.idq" METHOD="GET" ID="Form1">

           <!--…а параметр один - строка запроса -->

    Я ищу: <INPUT TYPE="TEXT" NAME="CiRestriction" SIZE="30" MAXLENGTH="100" VALUE="" ID="Text1">

           <!--Кнопка -->

           <INPUT TYPE="SUBMIT" VALUE="Поиск" ID="Submit1" NAME="Submit1">

    </FORM>

</BODY>

</HTML>

Файл search.idq является скриптом, который содержит всю необходимую информацию для запроса к СИ посредством ISAPI (Internet Server Application Programming Interface) расширения idq.dll. Для того чтобы IIS распознавал этот текстовый файл как скрипт в свойствах вашего веб-узла, на вкладке «Домашний каталог» нужно нажать кнопку «Настройка…» и сопоставить файлам с расширением *.idq фильтр Windows\System32\idq.dll.

Рисунок 3

Рисунок 3

Также необходимо, чтобы idq-файл находился в папке, имеющей право на исполнение скриптов (сценариев). После этого IIS будет обрабатывать IDQ (Internet Data Query) файлы так, как мы этого хотим. А хотеть мы можем примерно следующим образом:

Листинг 2. search.idq – скрипт для запроса на поиск

# [Query] – обязательная секция для idq-файла

[Query]

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

# имя файла, размер, релевантность, описание, полный путь,

# заголовок документа, дата последней модификации

CiColumns=filename, size, rank, characterization, vpath, DocTitle, write

# строка запроса (сужения) – то, что хочет найти пользователь

CiRestriction=%CiRestriction%

# максимально возможное количество документов

CiMaxRecordsInResultSet=100

# число найденных документов на страницу

CiMaxRecordsPerPage=10

# каталог(и) для поиска (относительно корневой папки веб-узла)

CiScope=/DaT, /

# DEEP указывает, что поиск идет во всех подкаталогах

# каталогов из CiScope

CiFlags=DEEP

# шаблонная страница для отображения результатов поиска

CiTemplate=/search.htx

# порядок сортировки найденных документов (здесь по уменьшению релевантности)

# d - уменьшение признака, a - увеличение

CiSort=rank[d]

Как видно, формат файла довольно прост: Переменная = Значение.

Небольшие комментарии относительно некоторых переменных:

  • CiRestriction – строка запроса. В данном случае принимает значение переменной %CiRestriction% из файла search.html (см. Листинг 1). Параметры, передаваемые в idq-файл, обрамляются с двух сторон знаками процента. Если хотите, можете передать больше параметров. Например, количество записей на страницу поиска.
  • CiSort – признак для сортировки результатов. В этой переменной можно указать любое поле из заданных в CiColumns (доступно около 60 различных полей). Данный параметр можно также сделать настраиваемым пользователем;
  • CiTemplate – ссылка на шаблонный htx-файл (HTML extension) для отображения результатов запроса;
  • CiFlags – указывает на необходимость обхода всех вложенных папок. Можно использовать для поиска только в указанных папках без обхода всех их подкаталогов. Тогда CiFlags должен быть равен SHALLOW.

В приведенном выше примере использованы далеко не все параметры для запроса. За полным перечнем свойств рекомендую обратиться к MSDN.

HTX

Файл htx является не чем иным, как HTML-страницей. Однако помимо тегов HTML в этом файле доступны специфические идентификаторы, относящиеся к СИ и являющиеся специфичными для введенного пользователем запроса. Эти переменные (идентификаторы), как и в idq-файле, обрамляются c обеих сторон знаком процента + знаки больше и меньше – слева и справа, как у тегов.

Например, имя файла текущей записи находится в переменной <%filename%>. Именно эти идентификаторы позволят вам определить количество найденных документов, их ранг, расположение, а также все остальные параметры. Вместо htx-расширения вы можете без ограничений использовать стандартное расширение html. Предлагаю рассмотреть пример шаблонной страницы, которая представит пользователю результаты поиска.

Листинг 3. search.htx – шаблонная страница для представления результатов поиска

<!--Новый поиск. Применяется возможность подключения

файлов -->

<%include /search.html%>

<HR width="100%" SIZE="1">

<!--в случае если нет никаких документов, т.е.

CiMatchedRecordCount==0, -->

<!--где CiMatchedRecordCount – число найденных документов -->

<%if CiMatchedRecordCount eq 0%>

    <H4> Не найдено документов, соответствующих запросу "<%CiRestriction%>". </H4>

<%else%>

    <!--Если что-то нашли, то указываем номер начальной и

    конечной записи на странице -->

    <H4>Документы с <%CiFirstRecordNumber%> по <%CiLastRecordNumber%> из <%CiMatchedRecordCount%> соответствующих запросу "<%CiRestriction%>". </H4>

<%endif%>

<!--%begindetail% выводит записи о найденных документах

с текущей %CiCurrentRecordNumber% -->

<!--до %CiCurrentRecordNumber%+%CiMaxRecordsPerPage%

записи -->

<%begindetail%>

         <!--Не забывайте, что клиент получит комментарии

           из этой секции много-много раз -->

    <br>

    <%CiCurrentRecordNumber%>.

    <b><a href="<%vpath%>"><%filename%></a></b>

    <b><i>Описание: </i></b><%characterization%><br>

    <!--выводим релевантность, точную ссылку, размер,

    и дату последней модификации -->

    <font size=-1 color=DarkGreen> <%rank%> - <%vpath%> - размер <%size%> байт - <%write%> GMT</font>

    <br>

<%enddetail%>

<!--Конструируем кнопки для перемещения между страницами

поиска -->

<!--Если в выведенных записях нет первой, значит, можно

вернуться назад, -->

<!--т.е. отображаем кнопку "Предыдущая" -->

<%if CiContainsFirstRecord eq 0%>

    <!--Передаем уже знакомому скрипту параметры сдвинуться

    на %CiMaxRecordsPerPage% записей назад -->

    <!--от первой записи на странице %CiBookmark%>

    <FORM ACTION="search.idq" METHOD="GET">

           <INPUT TYPE="HIDDEN" NAME="CiBookmark" VALUE="<%CiBookmark%>" >

           <INPUT TYPE="HIDDEN" NAME="CiBookmarkSkipCount" VALUE="-<%CiMaxRecordsPerPage%>" >

           <!--если на предыдущей странице вам не нужно

           значение %CiRestriction%, то можно-->

           <!--обойтись и без этой строки-->

           <INPUT TYPE="HIDDEN" NAME="CiRestriction" VALUE="<%CiRestriction%>" >

           <INPUT TYPE="SUBMIT" VALUE="Предыдущая">

           </FORM>

<%endif%>

<!--Аналогично поступаем с кнопкой "Следующая" -->

<%if CiContainsLastRecord eq 0%> -->

    <FORM ACTION="search.idq" METHOD="GET">

           <INPUT TYPE="HIDDEN" NAME="CiBookmark" VALUE="<%CiBookmark%>" >

           <INPUT TYPE="HIDDEN" NAME="CiBookmarkSkipCount" VALUE="<%CiMaxRecordsPerPage%>" >

         <INPUT TYPE="HIDDEN" NAME="CiRestriction" VALUE="<%CiRestriction%>" >

           <INPUT TYPE="SUBMIT" VALUE="Следующая">

           </FORM>

<%endif%>

Тегами <%begindetail%>…<%enddetail%> результат запроса разделяется на страницы с числом записей на каждой странице, равным <%CiMaxRecordsPerPage%>», задаваемым в idq-файле. Думаю, назначение остальных тегов ясно из текста программы.

Кроме тегов-переменных, к результатам поиска применимы условные переходы <% if %>…<% else %>…<% endif %> и логические операторы: EQ (равенство), NE (неравенство), LT/GT (меньше/больше), LE/GE (меньше/больше либо равно), CONTAINS (содержание одной строки в другой), ISTYPEEQ (принадлежность определенному типу).

Файлы htx поддерживают возможность подключения внешних html/htx-файлов (см. Листинг 3) при помощи директивы <%include filename%>. Подключать можно не более 31 файла, включая вложенные.

В этом примере для вывода информации о найденном документе использовано свойство документа %Characte-rization% – краткое описание (аннотация). Это описание автоматически генерируется СИ при индексировании документов. Если вы хотите, чтобы оно генерировалось, то это нужно указать в свойствах СИ на вкладке «Генерация» – «Генерировать аннотации». Там же можно указать размер аннотации.

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

Можно сказать, что в минимальном варианте мы имеем рабочую и достаточно функциональную поисковую систему. На следующем рисунке представлена третья страница с результатами поиска на запрос «Производительность & IIS» (рис. 4).

Рисунок 4

Рисунок 4

Hit-Highlighting

Традиционно в поисковых системах возможно отображение тех частей текста, где встречаются искомые слова или фраза. В СИ эту возможность фирма Microsoft назвала Hit-Highlighting. Для этого используется еще один вид скриптов – htw. Как и в случае с idq-скриптами, нужно «научить» IIS распознавать файлы htw как файлы сценария. Это делается тем же способом, который мы применяли по отношению к idq-файлам (см. выше).

Нужно сопоставить файлам с расширением htw ISAPI-фильтр – библиотеку Windows\system32\webhits.dll. После этого IIS при запросе «somefile.htw?параметры» сгенерирует страницу с результатами «подсветки». Самый элементарный запрос может иметь вид:

null.htw?CiWebhitsFile=pageforhighlight.html&CiRestriction=IIS

В этом запросе два обязательных параметра (все параметры указываются поочередно через знак амперсанда):

  • CiWebhitsFile – указывает на файл, для которого мы хотим сделать выделение участков текста.
  • CiRestriction – строка запроса. Это как раз та самая фраза, по которой и будет происходить отбор. В показанном запросе будут выделены все части текста из файла pageforhighlight.html, содержащие слово IIS.

Кроме основных параметров, существуют и дополнительные. Практически все они направлены на изменение вида отображаемого текста. Вы можете сделать выделенные слова жирными (CiBold), наклонными (CiItalic), указать цвет подсветки (CiHiliteColor).

Параметр CiHiliteType при передаче ему значения Full выводит не куски страницы, а всю ее целиком, подсвечивая искомые слова.

Файл null.htw является абстрактным файлом и служит указанием серверу для форматирования документа по умолчанию. В документации сообщается, что этот файл может и не существовать, однако без него IIS выдает стандартную ошибку – 404. После создания ничего не содержащего файла с таким именем все становится на свои места. Этот файл должен располагаться в папке, имеющей права на исполнение сценариев.

Показанный в листинге 3 пример можно дополнить ссылкой «подробней», которая и покажет найденные в тексте слова. Сделаем ее красным цветом. В секцию <%begin-detail%>…<%enddetail%> необходимо вставить следующий код:

Листинг 4. Ссылка на подробный отчет о совпадениях в документе

    <!--ссылка на документ, содержащий части текста,

    которые окружают искомую фразу -->

    <a href="Null.htw?CiWebhitsFile=<%escapeURL vpath%>&CiRestriction=<%escapeURL CiRestriction%> ">

    <font size=-1 color=Red> подробней </font> </a>

Здесь следует обратить внимание на ключевое слово <%EscapeURL%>. Это необходимо для приведения запросов к стандартному виду. Например, запрос на поиск всех документов с расширением doc «@filename=*.doc» в качестве параметра должен быть передан в виде «%40file-name=%2A.doc», а использованный несколько выше запрос «Производительность & IIS» будет заменен на:

“%EF%F0%EE%E8%E7%E2%EE%E4%E8%F2%E5%EB%FC%ED%EE%F1%F2 %FC%20%26%20IIS”

Похожее назначение и у ключевого слова <%Escape-HTML%>: он заменяет значимые в HTML символы на их аналоги. Таким образом, символ «<» будет заменен на «&lt».

Несколько слов о формате запросов

Правила, формат, примеры запросов для поиска исчерпывающе представлены во встроенной справке СИ. Руководство написано на удивление хорошо и понятно.

Заключение

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

За формальным описанием ключевых параметров и констант советую обратиться к MSDN (msdn.microsoft.com) и к примерам из Platform SDK.


Комментарии отсутствуют

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru