Поисковый сервер для локальной сети

Полнотекстовый поисковый сервер

Описываемая ниже программная система предназначена для использования в небольших локальных сетях под управлением ОС Windows со средним объемом документов, подлежащих индексированию (десятки Гб документов).

Количество клиентов, работающих с сервером, ограничивается только корректной настройкой СУБД, так как обработка поисковых запросов в значительной степени ложится на клиентское ПО. Этим поисковый сервер Solarix отличается от других продуктов, обычно предоставляющих веб-интерфейс с панелью запросов. Таким образом, вопросы балансировки нагрузки, резервного копирования индексных баз, и так далее, решаются именно средствами СУБД.

В качестве клиента используется специальная версия Premium программы Интегра или консольной утилиты faind. Другая возможность - использование веб-интерфейса. Заметьте, что Интегра.Premium без специальной настройки работает и как обычный настольный поисковик для данных на локальных жестких дисках рабочих станций. В сети может быть несколько поисковых серверов - например, для отдельных структурных подразделений. Количество одновременно используемых поисковых серверов для одного клиента ограничивается только техническими особенностями клиентской части СУБД.

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

Архитектура

Работа поисковой системы основана на 3х-звенной архитектуре.

1. Хранение данных о проиндексированных документах и организация многопоточного доступа к ним возложены на СУБД MySQL.

2. Поисковый сервер выступает в роли посредника - он получает по протоколу HTTP от клиентов запросы на выполнение поиска, транслирует их в команды DML реляционной базы данных, анализирует ответ MySQL, и наконец возвращает клиентам результаты поиска в виде HTML-страниц или XML-данных.

3. Клиентом поисковой системы может быть как обычный веб-браузер, так и прикладной код, обменивающийся с поисковым сервером данными с помощью XML-пакетов.

API поискового сервера и SDK

Самый простой способ, не требующий никакого дополнительного ПО - организовать взаимодействие между прикладным кодом и поисковым сервером по протоколу HTTP. В этом случае клиентский код делает GET-запросы, получая результаты в виде HTML или XML-данных. Поисковый сервер выступает при этом в роли веб-сервиса.

Если возможности поисковых утилит Integra и faind по каким-либо причинам не устраивают, можно использовать API для доступа к поисковому серверу. API для локального поиска и для доступа к серверу совершенно одинаков, что обеспечивает легкое масштабирование прикладного ПО.

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

Необходимое серверное и клиентское ПО

На стороне сервера Вам понадобятся:

1. Серверная версия Premium консольной поисковой утилиты faind, собранная для выбранной СУБД

2. Сервер СУБД

На клиентах понадобятся:

1. Базовая версия настольной поисковой системы Интегра

2. Интегра версии Premium - дополнительные компоненты для работы с сервером

Установка серверов

Последовательность шагов для установки поискового сервера.

1. Ставим MySQL сервер. Подойдет практически любая версия - проверялась версия 3.2 из пакета Denver и версия 5.1.

2. Административными средставами, например в консоли, создаем базу данных и пользователя для работы с ней. По умолчанию в ini файле индексатора прописана база 'faind" и пользователь "faind" без пароля. 

3. Устанавливаем FAIND MySql сервер, либо на эту же машину, либо на другую, имеющую сетевой доступ к СУБД.

4. В конфигурационном ini файле правим параметры подключения к БД - в секции [index] переменные db_host (сетевой адрес сервера), db (имя базы), db_login и db_psw (аутентификация). Сразу после установки этот файл находится прямо в каталоге программы, например c:\program files\integra\faind.ini. Дефолтные настройки заставят движок подключаться к базе на localhost. Инсталлятор сервера позволяет ввести параметры подключения к MySQL и сам записывает их в конфигурационный файл, так что возможно Вы уже сделали все необходимое:

параметры поискового сервера

5. Стартуем экземпляр (instance) БД.

6. Инсталлятор сервера уже запрашивал данные для создания индекса:

параметры поискового сервера

Поэтому если Вы вводили корректные значения, то инсталлятор уже подготовил три командных файла для создания, обновления и удаления индекса. Сами скрипты находятся в папке c:\Program Files\Integra\Scripts, их ярлычки также можно найти на рабочем столе. Вы можете запускать эти скрипты прямо сейчас, так как все уже подготовлено для работы сервера.

Если же Вас интересуют все технические детали, то можно выполнить следующие шаги.

7. Запускаем FAIND в консольном интерактивном режиме (с опцией -console). Инсталлятор уже создал соответствующий значок на рабочем столе для удобства, можете просто запустить программу через него. Поисковик попробует подключиться к СУБД и в случае успеха сам создаст все необходимые таблицы, если их еще нет.

8. Проверяем текущий список индексов командой -index domains (должен быть пустым) и параметры сервера MySQL командой -index info.

9. Объявляем новый пустой индекс: -index create_domain test

9. Заполняем этот индекс документами с любого доступного сетевого ресурса: -index domain=test -index wordforms -dir "\\computer111\share222"

10. По завершении индексирования можно выполнять поиск непосредственно с серверной консоли поисковика: -index domain=test -wordforms -sample "пример запроса"

11. Для созданного индекса можно посмотреть статистику: -index domain=test -index info

Файл конфигурации

После установки сервера заданные в инсталляторе параметры записываются в ini-файл, находящийся в каталоге программы.

Чтобы исключить ошибки, возникающие из-за процедуры поиска конфигурационного файла, в создаваемых скриптах CreateIndex.cmd и т.д. путь к созданному конфигурационному файлу задается явно с помощью опции -ini.

Кастомизация веб-страниц

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

1. В конфигурационном файле в секции [results] надо задать параметр template=true. Это заставит движок при начальной загрузке загружать пользовательский шаблон.

2. Путь, лучше всего абсолютный, к файлу шаблона надо указать с помощью параметра page_filename="c:\\dir1\\dir2\\template.htm". Конфигурационной файл в составе дистрибутива сервера уже содержит соответствующую строку.

3. Пример файла шаблона включен в дистрибутив сервера - это файл search-template.html. Это обычный текстовый файл с HTML-разметкой, в котором специальными тегами отмечены фрагменты

стилевые настройки - теги <search:head> ... </search:head>

форма ввода поискового запроса - теги <search:form> ... </search:form>

начало списка результатов - теги <search:hits_begin> ... </search:hits_begin>

один найденный файл (в списке) - теги <search:hit> ... </search:hit>

конец списка результатов - теги <search:hits_end> ... </search:hits_end>

статистика - теги <search:stat> ... </search:stat>

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

Общие параметры сервера:

{server_url} - полный url сервера

{index_list} - список доступных для поиска индексных баз, в формате для выпадающего списка, то есть с обрамлением тегами <option>...</option>

Блок одного найденного файла:

{click} - гиперссылка для перехода на найденный файл

{filename} - имя файла для отображения на странице

{size} - размер файла в Кб

{modified} - дата последнего изменения файла, зафиксированная в индексной базе

{context} - контекст фиксации, если при поиске сервер ищет также фрагменты текста, удовлетворяющие запросу

Блок статистики:

{hits} - количество найденных документов

{elapsed} - затраченное на поиск время

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

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

-hidden_query_fields вставляемый_текст

Заданный в опции текст вставляется внутри тегов <form>...</form>. Например, такая команда

-hidden_query_fields "<input type=\"hidden\" name=\"show_metainfo\" value=\"true\">"

добавит в GET-запрос, отправляемый формой на сервер, параметр show_metainfo=true, который соответствует команде -index show_metainfo.

При использовании этой команды в строке запуска веб-сервера надо соблюдать определенный порядок - опция -hidden_query_fields должна стоять до опции -httpd.

Установка клиентов

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

1. Установить на них базовую версию настольной поисковой системы и поверх нее - дополнение для работы с сервером.

2. Выполнить импорт описаний индексов либо с помощью пошагового визарда в Интегре (подробнее этот вопрос разобран в документации по созданию индексов), либо командой -index import в консольной поисковке. В Интегре импортированный индекс сразу будет виден в дереве индексов в каталогизаторе, почти ничем не отличаясь от локальных индексов. Вы, конечно, не сможете удалять или обновлять этот индекс c клиентской рабочей станции, но в поиске он работает как любой локальный индекс.

Режимы работы сервера

В подкаталоге со скриптами в папке программы есть два скрипта, упрощающие запуск сервера для следующих режимов.

1. StartWWWServer - запуск веб-сервера, принимающего запросы на поиск от клиентов по протоколу HTTP. Самый удобный вариант доступа к серверу со стороны клиентов заключается в запуске браузера и ввод url сервера. Сервер возвращает браузеру страницу запросов, заполнив которую, пользователь запускает поиск на сервере и затем получает результаты в виде веб-страницы.

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

полнотекстовый поисковый сервер

2. ServerConsole - запуск сервера в режиме административной консоли. В этом случае можно ввожить самые разнообразные команды - например, удалять индексы, создавать новые, обновлять их и так далее. Доступен весь набор команд, поддерживаемых поисковой системой.

3. CreateIndex, DropIndex, UpdateIndex - это сгенерированные инсталлятором скрипты для создания, удаления и обновления одного индекса, имя которого и папку с документами Вы ввели в инсталляторе. Можно сделать копии этих файлов для администрирования другими индексами, благодаря встроенной в поисковую систему возможности создавать произвольное количество индексных баз для различных массивов документов.

4. Unlock - этот скрипт понадобится, если создание или обновление одной из индексных баз завершилось аварийно. В таком случае в служебных таблицах серверной БД останется пометка о том, что индекс все еще записывается - это препятствует как удалению некорректно созданной базы, так и поиску по неудачно обновленной. Данный скрипт заставляет сервер сбросить флаг записи для всех индексов. Более аккуратным способом решения проблемы будет запуск административной консоли (см. выше скрипт ServerConsole) и исполнение команды типа -index domain=XXX -index unlock.

Автоматизация обновления индекса

В отличие от персональной поисковой системы Интегра, в которой есть встроенный механизм отслеживания изменений в индексах на локальных дисках, поисковый сервер нуждается в явном запуске обновления для индексов. В зависимости от конкретной ситуации, в частности от интенсивности обновления документов и нагрузке на сервер БД, можно настроить обновление в непрерывном режиме или раз в сутки ночью. В любом случае обновление выполняется запуском индексатора с указанием команды -index refresh. Будучи обычной консольной программой, индексатор допускает вызов в командных скриптах.

К примеру, можно создать командный скрипт типа:

faind -index domain=test -index refresh

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

Во время индексирования данные в БД будут доступны для поиска (с учетом особенностей работы СУБД, в частности блокировок таблиц во время транзакций).

Запуск скрипта обновления проще всего осуществлять стандартным планировщиком заданий ОС.

Параллельное индексирование нескольких областей

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

Если не принимать во внимание возможные сложности с блокировками таблиц, то несколько индексаторов могут одновременно обновлять отдельные индексы. Если документы обновляются достаточно редко (а это обычная ситуация), то значительная часть активности индексаторов будет заключаться в запросах к СУБД на выборку данных, с чем MySQL справляется весьма неплохо.

Дополнительные материалы

Процедурный API поисковой системы

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

Синтаксис поисковых запросов

Синтаксис определения области поиска

Где скачать поисковую систему и SDK

Скачать SDK поисковой системы с примерами и другие компоненты можно здесь поисковая система

  © Mental Computing 2009  home  rss  email  icq  download
изменено 07-Jun-10