DataparkSearch Engine 4.54

Справочное руководство


Содержание
1. Введение
1.1. Возможности DataparkSearch
1.2. Где взять DataparkSearch
1.3. Отказ от ответственности и гарантий
1.4. Авторы
1.4.1. Помощники
2. Установка
2.1. Требования к SQL базе даных
2.2. Поддерживаемые операционные системы
2.3. Инструментарий, необходимый для установки
2.4. Инсталяция DataparkSearch
2.5. Возможные проблемы установки
2.6. Создание дистрибутивов исполняемых модулей
2.7. Простая рутина использования
3. Индексирование
3.1. Общая информация об индексировании
3.1.1. Конфигурирование
3.1.2. Запуск indexer
3.1.3. Создание SQL-таблиц
3.1.4. Удаление SQL-таблиц
3.1.5. Управление подсекциями
3.1.6. Как очистить базу данных
3.1.7. Статистика базы данных
3.1.8. Проверка ссылок
3.1.9. Параллельное индексирование
3.2. Реакция на коды HTTP-ответа
3.3. Поддержка Content-Encoding
3.4. Стопслова
3.4.1. Команда StopwordFile
3.4.2. Формат файла стопслов
3.4.3. Команда FillDictionary.
3.4.4. Команда StopwordsLoose.
3.5. Клоны документов
3.5.1. Команда DetectClones
3.6. Указание веб-пространства для индексирования
3.6.1. Команда Server
3.6.2. Команда Realm
3.6.3. Команда Subnet
3.6.4. Использование различным параметров для сервера и его подсекций
3.6.5. Использование indexer -f <filename>
3.6.6. Команда URL
3.6.7. Команды ServerDB, RealmDB, SubnetDB и URLDB
3.6.8. Команды ServerFile, RealmFile, SubnetFile и URLFile
3.6.9. Стандарт исключений для роботов
3.7. Алиасы
3.7.1. Команда Alias (из indexer.conf)
3.7.2. Алиасы для различных частей сервера
3.7.3. использование алиасов в команде Server
3.7.4. Использование алиасов в команде Realm
3.7.5. Команда AliasProg
3.7.6. Команда ReverseAlias
3.7.7. Команда ReverseAliasProg
3.7.8. Алиасы в search.htm
3.8. ServerTable
3.8.1. Загрузка таблицы серверов
3.8.2. Структура таблицы серверов
3.8.3. Команда FlushServerTable
3.9. Внешние парсеры
3.9.1. Поддерживаемые типы парсеров
3.9.2. Установка парсеров
3.9.3. Воизбежание зависания парсера при выполнении
3.9.4. Конвееры в командных строках парсеров
3.9.5. Кодировки и парсеры
3.9.6. Переменная окружения DPS_URL
3.9.7. Некоторые внешние парсеры
3.9.8. Библиотека libextractor
3.10. Остальные команды, используемые в indexer.conf
3.10.1. Команда Include
3.10.2. Команда DBAddr
3.10.3. Команда VarDir
3.10.4. Команда NewsExtensions
3.10.5. Команда SyslogFacility
3.10.6. Команды указания длины слова
3.10.7. Команда MaxDocSize
3.10.8. Команда MinDocSize
3.10.9. Команда IndexDocSizeLimit
3.10.10. Команда URLSelectCacheSize
3.10.11. Команда URLDumpCacheSize
3.10.12. Команда UseCRC32URLId
3.10.13. Команда HTTPHeader
3.10.14. Команда Allow
3.10.15. Команда Disallow
3.10.16. Команда CheckOnly
3.10.17. Команда HrefOnly
3.10.18. Команда CheckMp3
3.10.19. Команда CheckMp3Only
3.10.20. Команда IndexIf
3.10.21. Команда NoIndexIf
3.10.22. Команда AllowIf
3.10.23. Команда DisallowIf
3.10.24. Команда HoldBadHrefs
3.10.25. Команда DeleteOlder
3.10.26. Команда UseRemoteContentType
3.10.27. Команда AddType
3.10.28. Команда Period
3.10.29. Команда PeriodByHops
3.10.30. Команда ExpireAt
3.10.31. Команда UseDateHeader
3.10.32. Команда LMDSection
3.10.33. Команда MaxHops
3.10.34. Команда TrackHops
3.10.35. Команда MaxDepth
3.10.36. Команда MaxDocsPerServer
3.10.37. Команда MaxHrefsPerServer
3.10.38. Команда MaxNetErrors
3.10.39. Команда ReadTimeOut
3.10.40. Команда DocTimeOut
3.10.41. Команда NetErrorDelayTime
3.10.42. Команда Cookies
3.10.43. Команда Section
3.10.44. Команда HrefSection
3.10.45. Команда FastHrefCheck
3.10.46. Команда Index
3.10.47. Команда ProxyAuthBasic
3.10.48. Команда Proxy
3.10.49. Команда AuthBasic
3.10.50. Команда ServerWeight
3.10.51. Команда OptimizeAtUpdate
3.10.52. Команда SkipUnreferred
3.10.53. Команда Bind
3.10.54. Команда ProvideReferer
3.10.55. Команда LongestTextItems
3.10.56. Команда MakePrefixes
3.11. Расширенные возможности индексирования
3.11.1. Расширенные возможности индексирования новостей
3.11.2. Индексирование таблиц SQL баз данных (виртуальная URL схема htdb:)
3.11.3. Индексирование вывода программ (виртуальные схемы URL exec: и cgi:)
3.11.4. Зеркалирование
3.11.5. Сбор данных
3.12. Использование syslog
3.13. Хранение сжатых копий документов
3.13.1. Конфигурирование stored
3.13.2. Как работает stored
3.13.3. Использование stored при поиске
3.13.4. Цитаты документов
4. HTML-парсер в DataparkSearch
4.1. Tag-парсер
4.2. Специальные символы
4.3. META-тэги
4.4. Ссылки
4.5. Комментарии
4.6. Шаблоны для индексирования
4.7. Sub-documents
5. Хранение данных
5.1. SQL режимы хранения
5.1.1. Общая инфоромация о хранении
5.1.2. Разнообразные способы хранения слов
5.1.3. Способ хранения single
5.1.4. Способ хранения multi
5.1.5. Способ хранения crc
5.1.6. Способ хранения crc-multi
5.1.7. Замечание о стуктуре таблиц для SQL серверов
5.1.8. Дополнительные возможности не-CRC режимов хранения
5.2. Способ хранения Cache
5.2.1. Введение
5.2.2. Структура индексов слов при способе хранения Cache
5.2.3. Утилиты для способа хранения Cache
5.2.4. Запуск способа хранения cache
5.2.5. Использование нескольких splitter одновременно
5.2.6. Использование скрипта run-splitter
5.2.7. Поиск
5.2.8. Использование лимитов при поиске
5.3. К вопросу производительности DataparkSearch
5.3.1. Рекомендация использовать searchd
5.3.2. Кэширование результатов поиска
5.3.3. Рекомендация использовать файловую систему в памяти (mfs)
5.3.4. Команда URLInfoSQL
5.3.5. Команда SRVInfoSQL
5.3.6. Команда MarkForIndex
5.3.7. Команда CheckInsertSQL
5.3.8. Производительность MySQL
5.3.9. Библиотека асинхронного резолвера
5.4. Поддержка SearchD
5.4.1. Для чего использовать searchd
5.4.2. Запуск searchd
5.5. Oracle notes
5.5.1. Introduction
5.5.2. Compilation, Installation and Configuration
6. Подсекции
6.1. Тэги
6.1.1. Команда Tag
6.1.2. Команда TagIf
6.1.3. Тэги в SQL версии
6.2. Категории
6.2.1. Команда Category
6.2.2. Команда CategoryIf
6.2.3. Загрузка таблицы категорий
6.2.4. Команда FlushCategoryTable
7. Поддержка языков
7.1. Кодировки
7.1.1. Поддерживаемые кодировки
7.1.2. Разные названия кодировок
7.1.3. Перекодировка во время индексации
7.1.4. Выбор LocalCharset
7.1.5. Определение кодировки документа
7.1.6. Автоматическое распознавание кодировки
7.1.7. Кодировка документов по-умолчанию
7.1.8. Язык документов по-умолчанию
7.1.9. Перекодировка во время поиска
7.1.10. Команда LocalCharset
7.1.11. Команда RemoteCharset
7.1.12. Команда URLCharset
7.1.13. Команда CharsToEscape
7.2. Создание многоязычных страниц поиска
7.2.1. Как это работает ?
7.2.2. Возможные сложности
7.3. Сегментеры фраз японского, тайского, корейского и китайского языков
7.3.1. Сегментер фраз японского языка
7.3.2. Сегментер фраз китайского языка
7.3.3. Сегментер фраз тайского языка
7.3.4. Сегментер фраз корейского языка
7.4. Поддержка мультиязычных веб серверов
8. Поиск документов
8.1. Использование поисковых фронт-эндов
8.1.1. Осуществление поиска
8.1.2. Параметры поиска
8.1.3. Изменение весов различных частей документов во время поиска
8.1.4. Использование фронт-энда на страницах с SSI
8.1.5. Использование нескольких шаблонов
8.1.6. Операторы происка
8.1.7. Булев поиск
8.1.8. Язык запросов Verity Query Language, VQL
8.1.9. Как используются при поиске устаревшие документы
8.2. Модуль mod_dpsearch для Apache httpd
8.2.1. Для чего использовать mod_dpsearch
8.2.2. Конфигурирование mod_dpsearch
8.3. Как создавать шаблоны результатов поиска
8.3.1. Секции шаблона
8.3.2. Секция Variables
8.3.3. Включения в шаблонах
8.3.4. Условные операторы в шаблонах
8.3.5. О безопасности
8.4. Дизайн search.html
8.4.1. Как создаётся страница результатов
8.4.2. Ваш HTML-шаблон
8.4.3. О формах
8.4.4. Относительные ссылки в search.htm
8.4.5. Добавление формы поиска на другие страницы
8.5. Релевантность
8.5.1. Упорядочивание документов
8.5.2. Расчёт релевантности
8.5.3. Рейтинг популярности
8.5.4. Булевы запросы
8.5.5. Crosswords
8.5.6. Алгоритм Построения Рефератов (SEA)
8.6. Регистрация поисковых запросов
8.7. Кэш результатов поиска
8.8. Нечёткий поиск
8.8.1. Ispell
8.8.2. Aspell
8.8.3. Синонимы
8.8.4. Поиск без учёта акцентов над буквами
8.8.5. Акронимы и аббревиатуры
9. Разное
9.1. Сообщение о багах
9.1.1. Известные ошибки и баги
9.1.2. Посмертные дампы
9.2. Использование библиотеки libdpsearch
9.2.1. Скрипт dps-config
9.2.2. DataparkSearch API
9.3. Структура таблиц базы данных
A. Помощь проекту
Предметный указатель
Список таблиц
3-1. Соответствие между типами keyword библиотеки libextractor и именами секций DataparkSearch
3-2. уровни подробности сообщений indexer'а
5-1. Типы предопределенных лимитов способа хранения Cache
5-2. Типы SQL-лимитов способа хранения Cache
7-1. Кодировки и их языковые группы
7-2. Синонимы наименований кодировок
8-1. Параметры поиска
8-2. Операторы VQL, поддерживаемые DataparkSearch
8-3. Параметры расчёта релевантности, задаваемые при компиляции (ключи для configure)
9-1. Структура таблицы server
9-2. Значения некоторых параметров серверов в таблице srvinfo

Глава 1. Введение

DataparkSearch является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или многих веб-серверах. DataparkSearch состоит из двух частей. Первая часть - индексирующий механизм (indexer). Indexer пробегает по ссылкам и сохраняет в базе данных все найденные слова и новые ссылки. Вторая часть состоит из CGI-программы, предоставляющей возможность поиска в данных, собраенных indexerом.

DataparkSearch отделился от mnoGoSearch CVS версии 3.2.16 27 ноября 2003 года как DataparkSearch версии 4.16. Первая версия mnoGoSearch была выпушена в ноябре 1998. До октября 2000, когда проект был передан Lavtech.Com Corp. и переименован в mnoGoSearch, поисковый движок носил имя UDMSearch.

Последние изменения можно найти на нашем web-сервере.

Оперативная информация об изменениях в DatapakSearch доступна в Твиттере: @dataparksearch.


1.1. Возможности DataparkSearch

Основные возможности DataparkSearch:

  • Поддержка MySQL (требуется библиотека libz), PostgreSQL, iODBC, unixODBC, EasySoft ODBC-ODBC bridge, InterBase, Oracle (см. Разд. 5.5>), MS SQL SQL-серверов.

  • Поддержка HTTP.

  • Поддержка HTTP-прокси.

  • Поддержка HTTPS.

  • Поддержка FTP.

  • Поддежка NNTP (обе схемы URL news:// и nntp://).

  • Виртуальная схема URL htdb://. Позволяет индексировать и искать по большим текстовым/блобовым полям SQL-баз данных.

  • Возможности зеркалирования.

  • Встроенная поддержка text/html, text/xml, text/plain, audio/mpeg (MP3) и image/gif.

  • Поддержка внешних парсеров для остальных типов документов.

  • Возможность индексировать мультиязычные сайты используя механизм согласования содержимого.

  • Нечёткий поиск на основе синонимов, акронимов и аббревиатур и всех форм (включая корректировку правописания) слов из поисковых запросов.

  • Поддержка Basic-авторизации. Позволяет индекировать интранет сервера, защищенные паролем.

  • Proxy authorization support.

  • Реентерабельность. Возможно выполнять одновременно несколько процессов индексирования и/или поиска по одной и тоже базе. Поддержка многопоточночти.

  • Поддержка стоп-листов.

  • Поддержка <META NAME="robots" content="..."> и robots.txt.

  • Интерфейсы и фронтэнды на C .

  • Поддержка логических запросов.

  • Испольщзование синонимов и словоформ для улучшения результатов поиска.

  • Сортировка документов по релевантности, популярности, дфте последнего изменения и по важности (произведению релевантности и популярности).

  • Поддержка почти всех популярных в Интерете кодировок, включая Восточно-Азиатские мультибайтные и UTF8.

  • Поддержка HTML шаблонов для гибкой настройки вывода результатов поиска.

  • Расширенные возможности поиска: тэги, категории, лимиты по времени и т.д.

  • Возможность разбиения на отдельные слова фраз японского, корейского, китайского и тайского языков.

  • Поиск без учёта акцентов символов.

  • mod_dpsearch - модуль для веб-сервера Apache.

  • Поддержка доменных имён в национальных кдировках (Internationalized Domain Names).

  • Алгоритм автоматического построения рефератов (SEA).


1.2. Где взять DataparkSearch

Последняя версия DataparkSearch доступна на http://www.dataparksearch.org/, а также на Google Code: http://code.google.com/p/dataparksearch/.

DataparkSearch также доступен в коллекции портов FreeBSD, см. www.freshports.org/www/dpsearch и в репозитории T2 Linux SDE.

Исходники DataparkSearch доступны через SVN на Google Code:

svn checkout http://dataparksearch.googlecode.com/svn/trunk/ dataparksearch-read-only


1.3. Отказ от ответственности и гарантий

Эта программа является свободным программным обеспечением; вы пожете распространять или модифицировать её в соответствии с условиями Общей публичной лицензии GNU (GNU General Public License) опубликованной Фондом Свободного ПО (Free Software Foundation); либо в Версии 2 этой Лицензии, либо (на ваше усмотрение) более поздней версии. Подробнее см. файл COPYING.

Эта программа распространяется в надежде, что она будет вам полезна, но БЕЗ КАКОЙ ЛИБО-ГАРАНТИИ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. подробности в Общей публичной лицензии GNU.

Вы должны были получить копию Общей публичной лицензии GNU вместе с копией этой программы; если это не так, обратитесь в Фонд свободного программного обеспеченияя по адресу: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA


1.4. Авторы

Maxim Zakharov , домашняя страница


1.4.1. Помощники

Michael Kynast : Первый пользователь DataparkSearch. Тестирование на Linux Red Hat.

Jean-Gerard Pailloncy: Тестирование на OpenBSD.

Amit Joshi: Тестирование на CentOS, пэкадж для Debian, идею по улучшению работы на нескольких PC и с несколькими DBAddr.

mnoGoSearch разработчики и помощники : Разработка и помощь в разработке mnoGoSearch до версии 3.2.15.


Глава 2. Установка

2.1. Требования к SQL базе даных

Если вы хотите скомпилировать DataparkSearch с одной из поддерживаемых SQL баз данных, вы должны установить эту SQL базу данных до начала установки DataparkSearch.

Начиная с версии 3.2 возможно использовать несколько различных SQL баз данных одновременно.

Вы также должны иметь права на создание новой базы данных и/или записи в уже существующую базу данных.

О MySQL: Если вы хотите собрать DataparkSearch с поддержкой MySQL, вам потребуется версия 4.1 или старше. Библиотека libz должна быть также установлена для успешной компиляции DataparkSearch с поддержкой MySQL. Пользователи Linux могут установить ее из zlib-devel RPM.

О PostgreSQL: Если вы хотите собрать DataparkSearch с поддержкой PostgreSQL, вам потребуется версия 8.2 или старше. Для новой установки рекомендуется поставить последнюю версию PostgreSQL.

Об iODBC: работает с iodbc-2.50.22a.

Об unixODBC: работает с unixODBC-1.7.

Об InterBase:

  • Работает с Interbase 4.0.

  • Работает с InterBase CS 6.0.

  • Работает с FirebirdCS-0.9-4.

О FreeTDS: Работает с версий 0.52 и с MS SQL 7.0.

Об Oracle8: Работает с версией 8.0.5.X.

Об Oracle8i: Работает с версией 8.1.6 R2 EE.


2.2. Поддерживаемые операционные системы

Мы используем GNU Autoconf, что позволяет скомпилировать DataparkSearch почти на всех современных UNIX системах, имеющих копилятор C. Разработка ведётся на FreeBSD 7.x с использованием PostgreSQL 8.3.

На даенный момент известно об успешных установках DataparkSearch на следующих опреационных системах:

  • CentOS 3.1, CentOS 3.3

  • Debian GNU/Linux (Lenny, Etch) (i386)

  • FreeBSD 2.2.x, 3.x, 4.x, 5.x, 6.x, 7.x

  • Linux Fedora Core-1, Kernel 2.4.22-1.2174

  • Linux Mandrake 10.2

  • Linux Red Hat 8.0, 9.0

  • Solaris 9

  • Solaris 10 x86, gcc

  • Ubuntu Linux 6.10, 7.x, 8.x, 9.04 (i386 and amd), 1x.yy

  • Gentoo Linux 2007.0 amd64

  • SUSE Linux

  • OpenBSD 4.5 (i386)

Мы надеемся, что DataparkSearch будет работать и на других Unix платформах. Пожалуйста, сообщайте об успешных установках на других платформах по адресу maxime@maxime.net.ru.

О NFS: Замечены проблемы при запуске DataparkSearch поверх NFS v4 на Linux 2.6.17. Однако все прекрасно работает при использовании на этой системе NFS v3.


2.3. Инструментарий, необходимый для установки

Для компиляции и установки DataparkSearch из исходников вам потребуется следующий инструментарий:

  • Bzip2 для распаковки дисрибутива.

  • tar для извлечения дерева исходников из дистрибутива. Рекомендуется GNU tar.

  • Компилятор ANSI C. Рекомендуется GNU gcc.

  • Программа make. GNU make рекомендуется, а зачастую и необходима.

  • Потоковый редактор sed.

  • Интерпретатор языка perl, если при инсталяции будет использоваться скрипт install.pl.

  • Для создания документации из XML-исходников, вам потребуется также установить jade или openjade.

    Для создания документации на английском языке в PDF формате, вам также потребуется jadetex. Используйте команду make book.pdf в поддиректории doc/ чтобы скомпилировать её.

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

  • sudo apt-get install zlib1g-dev automake autoconf autotools-dev libsigsegv2 m4 libtool libltdl-dev openjade sgml-data docbook-dsssl docbook docbook-xml docbook-xsl sp libidn11-dev libc-ares-dev

В зависимости от ваших предпочтений вам необходимо установить соответсвующий пакет разработчика, или все эти пакеты, если вам нужна поддержка всех этих SQL-серверов:

  • sudo apt-get install libpq-dev libmysqlclient-dev libsqlite3-dev

2.4. Инсталяция DataparkSearch

  1. Разархивируйте дистрибутив и перейдите а корневую директорию распакованного дерева исходников.

    tar -xyf dpsearch-x.x.tar.bz2

  2. Для упрощения процесса конфигурирования мы добавили скрипт конфигурации install.pl. Запустите install.pl и отвечая на вопросы, выберите нужную конфигурацию DataparkSearch После того, как вы выберите все опции, этот скрипт запустит ./configure с выбранными вами ключами. Он также создаст файл create install.options содержащий ваши настройки, которые будут использованы при следующих запусках этого скрипта. После того, как процесс конфигурирования будет завершен, создайте и проинсталируйте DataparkSearch как описано в разделе 3.

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

    Если нужна поддержка SQL базы данных:

    sh$ ./configure --with-mysql

    или

    sh$ ./configure --with-pgsql

    или другим ключом, соответствующим выбраной базе данных,

    или с несколькими базами:

    sh$ ./configure --with-mysql --with-pgsql --with-msql --with-freetds

    По умолчанию, DataparkSearch устанавливается в директорию /usr/local/dpsearch и поддериктории:

    ПоддиректорияСодержимое
    bin search.cgi, storedoc.cgi, dps-config
    lib libdpsearch.a(so), libdpcharset.a(so)
    sbin indexer, cached, run-splitter, searchd, splitter, stored
    etc indexer.conf-dist, search.htm-dist, langmap.conf-dist, searchd.conf-dist, stopwords.conf-dist, stored.conf-dist, storedoc.htm-dist
    shareДокументация и sql-скрипты

    Если у вас нет прав для создания этой директории, или вы хотите установить DataparkSearch в другую директорию, используйте для configure ключ --prefix, например,

    ./configure --prefix=/user/home/data --with-mysql

    Для установки DataparkSearch с поддержкой HTTPS, используйте следующий ключ для configure:

    ./configure --with-openssl

    или, в случае, когда, библиотека OpenSSL установлена не в стандартной директории:

    ./configure --with-openssl=/path/to/library

    Замечание: Пожалуйста, имейте в виду, что установка библиотеки OpenSSL на вашем компьютере необходима для поддержки HTTPS.

    Вы можете видеть все ключи, запустив ./configure --help

    Если вы хотите передать для компилятора C некоторые специфицеские ключи (например, '-O7 -mpentium' создания оптимизированного кода под процессор Pentium™, если используется компилятор egcs/pgcc), это можно сделать при помощи следующей команды

    sh$ CFLAGS="-O7 -mpentium"

    до запуска configure.

    Для компиляции DataparkSearch под FreeBSD с поддержкой Solid в старом aout формате, используйте

    sh$ CFLAGS="-aout"

    до запуска configure.

    Для компиляции DataparkSearch под FreeBSD с aout InterBase используйте

    sh$ CFLAGS="-aout -static"

    до запуска configure.

    Вы можете также указать --enable-pthreads для компиляции многопоточной версии indexer.

    Для включения поддержки отладчика памяти DMALLOC используйте ключ --enable-dmalloc.

    Кодировки euc-kr, big5, gb2312, tscii, gujarati и shift-jis не поддерживаются по умолчанию. Для включения поддержки используйте ключ --with-extra-charsets.

    Для включения поддержки всех кодовых страниц, используйте:

    ./configure --with-extra-charsets=all

    Для включения поддержки только какой-то одной кодовой страницы:

    ./configure --with-extra-charsets=tscii

    Для включения поддержки семейства кодировок китайского или японского языков:

    ./configure --with-extra-charsets=chinese или ./configure --with-extra-charsets=japanese

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

    ./configure --with-extra-charset=chinese,gujarati

    Если у вас возникли трудности с конфигурированием, пожалуйста, смотрите Разд. 2.5>.

  3. Скомпилируйте и установите DataparkSearch.

    sh$ make

    sh$ make install

    Если у вас возникли трудности с компиляцией, пожалуйста, смотрите Разд. 2.5>.

  4. Создайте базу данных search (только для SQL баз данных).

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

    MySQL:

    sh$ mysqladmin create search

    PostgreSQL:

    sh$ createdb search

    Для других баз данных см. документацию на соответствующую базу данных.

  5. Создайте файлы конфигурации.

    Для этого в директории конфигурационных файлов ( по умолчанию это /usr/local/dpsearch/etc/) скопируйте indexer.conf-dist в indexer.conf и search.htm-dist в search.htm. Затем отредактируйте indexer.conf и search.htm согласно вашим потребностям. В основном вам необходимо только отредактировать команду DBAddr в обоих файлах указав соединение с SQL-сервером и необходимый dbmode.

  6. Создайте sql-таблицы

    Выполните команду:

    sh$ indexer -Ecreate

    indexer автоматически создаст все нужные таблицы согласно dbmode, указанному в indexer.conf.

  7. Установка программы поиска

    Скопируйте search.cgi в cgi-bin директорию вашего веб-сервера или создайте алиас в Apache на поддиректорию bin/ DataparkSearch.


2.5. Возможные проблемы установки

  • Каждый раз, когда вы запускаете configure, вы должны опять запустить make для перекомпиляции.

    Во избежание использования информации о предыдущей конфигурации или устаревших объектных файлов, выполните эти команды перед повторным запуском configure:

    sh$ rm config.cache

    sh$ make clean

  • Завершение компиляции с ошибками иногда может быть связана с некорректной версией make. Работа стандартной команды make под Solaris, FreeBSD, OpenBSD немного отличается от GNU make. Попробуйте использовать GNU make вместо стандартной версии, часто она называется gmake.

    GNU make версии 3.77 проверена и работает.

  • Если при запуске Apache c модулем mod_dpsearch вы получаете такое сообщение об ошибке: Undefined symbol "pthread_join" (или что-то подобное относящееся к pthreads), попробуйте добавить следующую команду в файл конфигурации httpd.conf до загрузки mod_dpsearch.so:

    LoadFile /usr/lib/libpthread.so

Если информация выше не помогла вам, пожалуйста, отправьте описание вашей проблемы на список рассылки (пожалуйста, при возможности пишите на английском).


2.6. Создание дистрибутивов исполняемых модулей

Вы можете создать дистрибутив исполняемых модулей для вашей системы (tar.bz2 архив, пакет Debian или пакет RPM). Для создания дистрибутива исполняемых модулей используйте команду make bin-dist для создания tar.bz2 архива, или команду make pkg-deb для создания Debian пакета, или команду make pkg-rpm для создания пакета RPM. Пожалуста, имейте в виду, что при создании паета RPM сначала создаётся Debian пакет, который затем конвертируется в формат RPM при помощи утилиты alien.


2.7. Простая рутина использования

Перед первым запуском indexer, вам необходимо указать пространство индексирования (см. Разд. 3.6>). В простом случае, когда вам необходимо индексировать один сайт, необходимо добавить команду Server, аналогичную указанной ниже в ваш файл конфигурации indexer.conf:

Server http://www.server.ext/

Запустите indexer для индексирования ваших данных и записи информации об URL:

sh$ /usr/local/dpsearch/sbin/indexer -W


Глава 3. Индексирование

3.1. Общая информация об индексировании

3.1.1. Конфигурирование

Сначала необходимо сконфигурировать DataparkSearch. Конфигурирование indexer полностью описано в файле indexer.conf-dist. Вы найдете его в директории etc исходников DataparkSearch. Вы также можете посмотреть примеры в директории doc/samples.

Для установки файла indexer.conf перейдите в директорию DataparkSearch /etc, скопируйте indexer.conf-dist в indexer.conf и отредактируйте последний.

Для конфигурирования CGI-программы поиска (search.cgi и/или search.php3, или другой), Вы должны в директории DataparkSearch /etc скопировать файл search.htm-dist в search.htm и отредактировать последний. См. Разд. 8.3> для подробного описания.


3.1.2. Запуск indexer

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

По умолчанию, indexer, вызванный без всяких параметров командной строки, переиндекирует, только устаревшие документы. Вы можете задать период "старения" при помощи команды Period в indexer.conf. Если Вам необходимо переиндекировать все документы, независимо от того, устарели они или нет, используйте ключ -a. indexer при запуске пометит все документы как устаревшие.

Запрашивая документы, indexer посылает HTTP заголовок If-Modified-Since для документов уже находящихся в базе. Когда indexer получает очередной документ, он вычисляет контрольную сумму документа, если она совпадает со старой контрольной суммой, хранящейся в базе данных, докумен заново не разбирается (считается неизменённым) Ключ indexerа -m заставляет разбирать заново каждый документ, независимо от того, измён он или нет. Это может быть полезным, например, когда меняются правила Allow/Disallow в indexer.conf и необходимо добавить новые страницы, которые раньше были запрещены к обработке.

Если на запрос документа DataparkSearch получает HTTP-статусы переадресации 301,302,303, он попытается проиндексировать URL, указанный в заголовке Location: ответа сервера.


3.1.3. Создание SQL-таблиц

Для создание SQL-таблиц, необходимых для работы DataparkSearch, используйте indexer -Ecreate. При запуске с таким аргументом, indexer ищет файл, содержащий SQL-выражения, необходимые для создания всех таблиц, учитывая тип базы данных и режим хранения, указанные в команде DBAddr в indexer.conf. Поиск файлов производится в каталоге /share инсталляции DataparkSearch, т.е. обычно в /usr/local/dpsearch/share/.


3.1.4. Удаление SQL-таблиц

Для удаления SQL-таблиц, созданных DataparkSearch, используйте indexer -Edrop. Поиск файл с запросами для удаления таблиц производится в каталоге /share инсталляции DataparkSearch.


3.1.5. Управление подсекциями

indexer имеет ключи -t, -g, -u, -s, -y для ограничения работы только с чатью базы ссылок. -t соответсвует ограничению по тэгу, -g соответсвует ограничению по категории, -u - ограничение по части URL (поддерживаются шаблоны SQL LIKE с символами % и _), -s - ограничение по HTTP статусу документа, -y - ограничения по Content-Type. Все ограничения для одного и того же ключа объединяются опрератором ИЛИ, а группы разных ключей - оператором И.


3.1.6. Как очистить базу данных

Чтобы очистить всю базу данных, используйте команду indexer -C. Вы можете также удалить тольеко часть базы, используя ключи указания подсекций -t,-g,-u,-s,-y.


3.1.7. Статистика базы данных

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

Значения кода статуса:

  • 0 - новый (еще ни разу не индексированный) документ

Если статус не 0, он равен коду HTTP ответа, некоторые коды ответов HTTP:

  • 200 - "OK" (url успешно проиндексирован)

  • 301 - "Moved Permanently" (переадресован на другой URL)

  • 302 - "Moved Temporarily" (переадресован на другой URL)

  • 303 - "See Other" (переадресован на другой URL)

  • 304 - "Not modified" (url не модифицирован со времени предыдущего индексирования)

  • 401 - "Authorization required" (нужен login/password для этого документа)

  • 403 - "Forbidden" (нет доступа к этому документу)

  • 404 - "Not found" (указаный документ не существует)

  • 500 - "Internal Server Error" (ошибка в cgi, и т.д.)

  • 503 - "Service Unavailable" (Хост недоступен, таймайт соединения)

  • 504 - "Gateway Timeout" (таймаут при получении документа)

Код ответа HTTP 401 обозначает, что документ защищён паролем. Вы можете использовать команду AuthBasic в indexer.conf для указания login:password для URL.

Код ответа HTTP 404 означает, что на одной из Ваших страниц есть ссылка на несуществующий документ, или есть ошибка в указании URL..

Смотрите документацию по HTTP для подробного объяснения различных кодов ответа HTTP.


3.1.8. Проверка ссылок

Будучи запущенным с ключом -I, indexer показывает пары URL и страница, ссылающаяся на него. Это полезно для поиска битых ссылок на Ваших страницах. Вы также можете использовать ключи ограничений подсекций для этого режима. Например, indexer -I -s 404 покажет адреса всех ненайденных ('Not found') документов вместе с адресами страницами, содержащими ссылки на эти документы. Таким образом Вы можете использовать DataparkSearch для проверки ссылок на Вашем сайте.


3.1.9. Параллельное индексирование

Возможно запускать одновременно несколько indexer с одним и тем же файлом конфигурации indexer.conf. Мы успешно опробовали 30 одновременно работающих indexer использующих базу данных MySQL. По умолчанию, indexer помечает документы, выбранные к индексированию, как устаревающие через 4 часа в будущем для избежания двойного индексирования одних и тех же документов разными одновременно работающими indexer. Однако это не дает 100% гарантии избежания повторного индексирования. Вы можете использовать многопоточную версию indexer c любым SQL сервером, поддерживающим параллельные соединения с базой. Многопоточная версия использует свой собственный механизм блокировки.

Не рекомендуется использовать одну и ту же базу с различными файлами конфигурации indexer.conf! Один процесс может добавлять некоторые документы в базу, в то время как другой - удалять эти же документы, и оба могут работать без остановки.

С другой стороны, Вы можете запускать несколько indexer c различными файлами конфигурации и различными базами для любого поддерживаемого SQL сервера.


3.2. Реакция на коды HTTP-ответа

В этом разделе описана реакция DataparkSearch на разные коды HTTP-ответа. Для описания использован псевдо-язык.

  • 200 OK

    1. Если указан ключ -m ("force reindex"), то переход к 4.

    2. Сравнение новой и старой, сохраненной в БД, контрольных сумм документа

    3. Если контрольные суммы равны, то next_index_time=Now()+Period, переход к 7

    4. Разбор документа, создание списка слов, добавление в БД новых гипертекстовых ссылок

    5. Удаление старого списка слов и секций из БД

    6. Вставка нового списка слов и секций

    7. Конец

  • 304 Not Modified

    1. next_index_time=now()+Period

    2. Конец

  • 301 Moved Permanently
    302 Moved Temporarily
    303 See Other

    1. Удаление слов данного документа из БД

    2. next_index_time=Now()+Period

    3. Добавление в БД URL из заголовка Location:

    4. Конец

  • 300 Multiple Choices
    305 Use Proxy (proxy redirect)
    400 Bad Request
    401 Unauthorized
    402 Payment Required
    403 Forbidden
    404 Not found
    405 Method Not Allowed
    406 Not Acceptable
    407 Proxy Authentication Required
    408 Request Timeout
    409 Conflict
    410 Gone
    411 Length Required
    412 Precondition Failed
    413 Request Entity Too Large
    414 Request-URI Too Long
    415 Unsupported Media Type
    500 Internal Server Error
    501 Not Implemented
    502 Bad Gateway
    505 Protocol Version Not Supported

    1. Удаление из БД слов документа

    2. next_index_time=Now()+Period

    3. Конец

  • 503 Service Unavailable
    504 Gateway Timeout

    1. next_index_time=Now()+Period

    2. Конец


3.3. Поддержка Content-Encoding

Поисковый движок DataparkSearch поддерживает сжатие HTTP запросов и ответов (Content encoding). Сжатие запросов и ответов http-сервера позволяет значительно улучшить производительность обработки http-запросов за счет уменьшения объёма передаваемых данных.

Использование сжатия http-запросов позволяет уменьшить трафик в два и более раз.

В спецификации HTTP 1.1 (RFC 2616) определены четыре метода кодирования содержимого ответов сервера: gzip, deflate, compress, и identity.

Если включена поддержка Content-encoding, indexer шлёт http-серверу заголовок Accept-Encoding: gzip,deflate,compress.

Если http-сервер поддерживает любой из методов кодирования gzip, deflate or compress он шлёт ответ, закодированый этим методом.

Для сборки DataparkSearch с поддержкой сжатия HTTP-запросов, необходимо наличие библиотеки zlib, установленной на вашем компьютере.

Чтобы включить поддержку Content encoding, сконфигурируйте DataparkSearch с указанием следующего ключа:

./configure --with-zlib

Используете этот ключ совместно с другими нужными вам ключами.


3.4. Стопслова

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


3.4.1. Команда StopwordFile

Загружает стоп-слова из указаного файла. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд StopwordFile.

StopwordFile stopwords/en.sl

Вы должны использовать один и тот же надор команд StopwordFile в indexer.conf и search.htm (searchd.conf если используется searchd).


3.4.2. Формат файла стопслов

Вы можете создавать свои файлы стоп-слов. В качестве примера, вы можете использовать файл английских стоп-слов etc/stopwords/en.sl. В начале листа поместите следующие две команды:

Language: en
Charset:  us-ascii

  • Language - стандартный (ISO 639) двух-буквенный код языка.

  • Charset - любая кодировка, поддерживаемая DataparkSearch (см. Разд. 7.1>).

Затем следует список слов, по одному на строку. Каждое слово записывается в кодировке, указанной выше командой Charset:.

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

Match: regex ^\$##

По этой команде любое слово, начинающееся с $## будет рассматриваться как стоп-слово.

Опции команды Match: аналогичны опциям команды Allow (см. Разд. 3.10.14>). Аргументы записываются в кодировке, указанной командой Charset:. Регулярные выражения в данный момент ограничены (например, не поддерживаются интервалы).


3.4.3. Команда FillDictionary.

При помощи команды "FillDictionary yes" в indexer.conf вы можете включить сохранение всех индексируемых слов в таблице "dict" для способа хранения cache. Это может пригодиться для отслеживания, какие слова могут быть стопсловами для вашей инсталляции.


3.4.4. Команда StopwordsLoose.

Если в indexer.conf и в search.htm указана команада "StopwordsLoose yes", только стопслова того же языка, что и индексируемый документ или языка поискового запроса считаются таковыми, т.е. стопслова для других языков обрабатываются как обычные слова для текущего индексируемого документа или исполняемого поискового запроса.


3.5. Клоны документов

Клоны -- документы, имеющие одинаковые значения Hash32 вычисляемой по всем секциям документа. Копии одного и того же документа имеют одинаковые значения Hash32. Это позволяет не индексировать дубликады документов в коллекции. Однако: всли в файле sections.conf определена только секция title, тогда все документы с разными телами, но одинаковыми title будут считаться клонами.


3.5.1. Команда DetectClones

DetectClones yes/no

Включает или выключает механихм определения и игнорирования "клонов" документов. При включении, indexer будет определять копии документов, расположенных, например, на зеркалах, и не индексировать их повторно. Значение по умолчанию: yes.

DetectClones no


3.6. Указание веб-пространства для индексирования

Каждый раз когда indexer добавляет новую ссылку или выбирает очередную ссылку для индексирования, он сначала проверяет, задана ли в indexer.conf для этой ссылки команда Server, Realm или Subnet. Ссылки, не имеющие ни одной такой соответсвующей им команде не добавляются в базу, а если же такие ссылки уже находятся в базе данных (например, после удаления одной из команд Server, Realm или Subnet из файла indexer.conf), то они удаляются при очередной попытке их индексации.

Эти команды имеют один обязательный параметр pattern и шесть необязательных: method, subsection, CaseType, MatchType, CmpType и Alias. Формат этих команд:

<команда> [method] [subsection] [CaseType] [MatchType] [CmpType] pattern [alias]

Обязательный параметр pattern задаёт либо URL, либо его фргамент, или шаблон для сравнения.

Значение параметра subsection должно быть одним из page, path, site, world и по умолчанию используется значение path.

  1. Server path

    Описывает документы, расположенные на том же сервере и в том же подкаталоге, что и аргумент URL команды Server. Например, если задана команда Server path http://localhost/path/to/index.html, все URL, начинающиеся с http://localhost/path/to/, соответствуют этой команде Server.

    Следующие команды имеют одинаковый эффект на задание пространства индексации, и лишь отличаются адресами документов, добавляемых в базу при старте:

    Server path http://localhost/path/to/index.html
    Server path http://localhost/path/to/index
    Server path http://localhost/path/to/index.cgi?q=bla
    Server path http://localhost/path/to/index?q=bla

  2. Server site

    Описывает все документы с того же самого сервера, что и аргумент команды Server. Например, Server site http://localhost/path/to/a.html описывает любой документ с сервера http://localhost/.

  3. Server world

    Если в качестве значения параметра subsection каманды Server задано word, то это описывает абсолютно любой документ. См. объяснение ниже.

  4. Server page

    При этом значении параметра subsection только URL, указанный в качестве параметра команды Server, соответствует этой команде.

  5. Server nofollow

    Не идти по ссылкам для любого URL, подпадающего под указаный шаблон.

  6. subsection для схемы news://

    Для схемы news:// значение subsection всегда равно site. Это обусловлено отсутствием в этой схемы директорий, как в схемах ftp:// или http://. Используйте Server news://news.server.com/ для индексирования всего ньюс-сервера. Для индексации одной ньюсгруппы, например, udm - команду Server news://news.server.com/udm

Необязательный параметр CaseType задаёт чувствительность к регистру при сравнении строк, может принимать значения case - нувствительное к регистру сравнение, и nocase - чувствительное сравнение.

Необязательный параметр CmpType узазывает тип сравнения и может принимать значения Regex и String. Типа сравнения String означает сравнение строкового шаблона и используется по умолчанию. В параметре pattern Вы можете использовать символы ? и *, они обозначают "один символ" и "любое число символов" соответственно. Используйте символ \ в качестве префикса перед этими специальными символами в ваших шаблонах, если вы их хотите использовать как обычнве символы. Например, если Вы хотите описать все HTTP сайты в домене .ru, используйте эту команду:

Realm http://*.ru/*

Сравнение как регулярных выражений производится если указан параметр Regex. Например, Вы можете описать все HTTP сервера домена .ru, используя регулярное выражение:

Realm Regex ^http://.*\.ru/

Необязательный параметр MatchType определяет тип совпадения. Для этого параметра могут указываться два значения: Match и NoMatch, по умолчанию используется значение Match. Команда Realm NoMatch имеет обратный эффект. Это обозначает, что URL, не попадающий под указанный pattern, будет соответствовать этой команде Realm. Например, используйте эту команду для индексирования любых документов, за исключением .com доменов:

Realm NoMatch http://*.com/*

Необязательный параметр alias позволяет организовать сложный механизм замены URL, нежели предоставляет механизм алиасов. Смотрете Разд. 3.7> для объяснения использования параметра alias. Alias работает только с типом сравнения Regex, и не даёт никакого эффекта при типе сравнении String.

Необязательный параметр method в командах Server, Realm и Subnet описывает действие, которое будет произведено с документами, соответствующими его команде и может принимать значения Allow, Disallow, HrefOnly, CheckOnly, Skip, CheckMP3, CheckMP3Only. Значением по-умолчанию является Allow.

  1. Allow

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

  2. Disallow

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

  3. HrefOnly

    Параметр HrefOnly означает, что документы, соответствующие его команде, не будут индексироваться, а будут только просканированы на наличие новых ссылок. Это, например, полезно при просмотре RSS-фидов для обнаружения новых документов сайта. Используйте этот параметр для описания страниц, содержащих не сами сообщения, а списки сообщений со ссылками на них. Например:

    Server HrefOnly Page http://www.site.ext/feed.xml
    Server Allow    Path http://www.site.ext/

  4. CheckOnly

    Параметр CheckOnly означает, что документы, соответствующие его команде, будут запрашиваться методом HTTP HEAD, а не HTTP GET, т.е. будет запрошено не содержимое документа, а только краткая информация о нем: размер, дата модификации, Content-Type. Это позволяет, например, организовать проверку своего сайта на правильность ссылок:

    Server HrefOnly  http://www.dataparksearch.org/
    Realm  CheckOnly *

    Эта комбинация команд заставляет indexer сканировать все документы сайта www.dataparksearch.org и собирать ссылки, находящиеся на них. Те же документы, которые находятся вне сайта www.dataparksearch.org будут проверены методом HEAD. Команда indexer -S затем поможет увидеть все ли внутренние и внешние ссылки верны.

  5. Skip

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

  6. CheckMP3

    Параметр CheckMP3 означает, что документы, соответствующие его команде, будут проверяться на наличие тэгов MP3 несмотря на наличие Content-Type, отличного от audio/mpeg. Это полезно, в частности, когда удаленный сервер выдает application/octet-stream в качестве Content-Type для файлов в формате MP3. При наличии MP3 тэгов будет произведена их индексация, а в случае их отсутствия indexer продолжит работу, предусмотренную для полученного Content-Type: запуск внутреннего или внешного парсера.

  7. CheckMP3Only

    Этот параметр работает аналогично CheckMP3, однако при отсутствии тэгов MP3 indexer не будет запускать внутренний или внешний парсер, предусмотренный для полученного Content-Type.


3.6.1. Команда Server

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

Например, команда Server http://localhost/ разрешает индексировать документы сервера http://localhost/. Также, indexer вставляет документ с адресом http://localhost/ в базу данных.

Вы также можете задать некоторый подкаталог для индексирования только части сервера: Server http://localhost/subsection/. И эта команда также добавляет аргумент в базу данных для использования его в качестве стартовой точки индексирования.

Замечание: Вы можете заставить indexer не добавлять в базу URL, указанные в командах Server, задав в командной строке ключ -q. Это полезно, когда у вас несколько сотен или тысяч команд Server, а соответсвующие им URL уже добавлены в базу, в частности, это ускоряет запуск indexer.


3.6.2. Команда Realm

Команда Realm обладает более гибкими возможностями указания веб-пространства для индексирования. Эта команда работает почти также как и команда Server, однако отличается от нее тем, что:

  • получает в качестве аргумента не адрес сервера или его подкаталога, а шаблон адресов.

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


3.6.3. Команда Subnet

Команда Subnet предоставляет другой способ задания веб-пространства для индексирования. Она работает аналогично команде Server, с тем отличием, что указанный текстовый шаблон сравнивается не с URL, а с IP-адресом, соответствующим проверяемому URL. Параметр pattern для этой команды может содержать символы * и ?, обозначающие "один символ" и "любое число сиволов" соответственно, или же задаваться в виде сети в CIDR формате (a.b.c.d/m, a.b.c, a.b, a). Например, если нужно описать все HTTP сайты локальной подсети, используйте следующую команду:

Subnet 192.168.*.*
Subnet 192.168.10.0/24

Вы можете использовать необязательный параметр MatchType, работающий так же, как и аналогичный у команды Realm. Например, если Вы хотите индексировать все, за исключением подсети 195.x.x.x, используйте:

Subnet NoMatch 195.*.*.*


3.6.4. Использование различным параметров для сервера и его подсекций

Indexer перебирает команды Server и Realm в том порядке, в каком они указаны в файле конфигурации. Таким образом, если Вы хотите задать различные параметры, например, для всего сервера и некоторых его подсекций, Вы должны добавить строки для секций до строк, относящихся к серверу целиком. Представим, что на Вашем сервере есть директория, содержащая страницы с новостями. Очевидно, эти страницы необходимо переиндексировать чаще, нежели остальные части содержимого сервера. Следующая последовательность команд может быть полезна в этом случае:

# Add subsection
Period 200000
Server http://servername/news/

# Add server
Period 600000
Server http://servername/

Эти команды задают другой период переиндексирования для поддиректории /news/ в отличие от периода индексирования остального сервера. indexer выбирет первую команду Server для http://servername/news/page1.html т.к. это первая соответсвующая URL команда Server.


3.6.5. Использование indexer -f <filename>

The third scheme is very useful for indexer -i -f url.txt running. You may maintain required servers in the url.txt. When new URL is added into url.txt indexer will index the server of this URL during next startup.


3.6.6. Команда URL

URL http://localhost/path/to/page.html

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


3.6.7. Команды ServerDB, RealmDB, SubnetDB и URLDB

URLDB pgsql://foo:bar@localhost/portal/links?field=url

Эти команды аналогичны командам Server, Realm, Subnet и URLсоответственно, но аргументы для вставки в базу выбираются из указанного поля SQL-таблицы. В примере выше ссылки выбираются из базы portal, SQL-таблицы links и поля url.


3.6.8. Команды ServerFile, RealmFile, SubnetFile и URLFile

URLFile url.lst

Эти команды аналогичны командам Server, Realm, Subnet и URLсоответственно, но аргументы для вставки в базу выбираются из указанного текстового файла, в котором каждый аргумент указывается на отдельной строке. В примере выше ссылки выбираются из текстового файла url.lst, расположенного в директории /usr/local/dpsearch/etc. Однако можно указывать и полный путь до файла с аргументами.


3.6.9. Стандарт исключений для роботов

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

DataparkSearch также соблюдает мета тэги: nofollow, noarchive и noindex.

DataparkSearch также поддерживает директивы Crawl-delay и Host в robots.txt.

Ниже указаны команды в файле indexer.conf, относящиеся к стандарту исключений для роботов.


3.6.9.1. Команда Robots

Robots yes/no

Разрешает или запрещает использование robots.txt и <META NAME="robots" ...> для исключения страниц. Используйте no, например, для проверки ссылок на вашем сайте или сайтах. Имейте в виду, что игнорирование чужих robots.txt не приветсвуется сетевым этикетом. Команда действует до конца файла, или до следующей команды Robots. Значение по умолчанию: yes.

Robots yes


3.6.9.2. Команда RobotsPeriod

По умолчанию, данные из robots.txt хранятся в SQL-базе одну неделю. Вы можете изменить этот период используя команду RobotsPeriod:

RobotsPeriod <time>
См. формат <time> в описании команды Period из Разд. 3.10.28>.
RobotsPeriod 30d


3.6.9.3. Команда CrawlDelay

Используйте эту команду для задания периода в секундах между последовательными запросами к одному и тому же серверу. Аналогична команде crawl-delay в файле robots.txt, но может быть задана в indexer.conf файле для каждого сервера в отдельности. Если не задано значение crawl-delay value в robots.txt, используется значение, указаное в CrawlDelay. Если значение crawl-delay указано в robots.txt, тогда используется максимальное значение из CrawlDelay и crawl-delay.


3.6.9.4. Команда MaxCrawlDelay

Когда indexer готов индексировать очередной URL с сервера, для которого интервал Crawl-deley с предыдущего обращения к сайту еще не истек, он ожидает, пока этот период не истечет, если период ожидания в секундах меньше значения, указанного командой MaxCrawlDelay. Если период ожидания больше или равен этому значению, выбранный URL откладывается в индексировании на период ожидания.

MaxCrawlDelay 60

Значение по-умолчанию: 300 секунд.


3.7. Алиасы

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


3.7.1. Команда Alias (из indexer.conf)

Формат команды "Alias" indexer.conf:

Alias <главныйURL> <вторичныйURL>

Например, для индексации http://www.site.ru/ с использованием ближайшего зеркала http://www.other.com/mirrors/site.ru/ нужно добавить следующие строки в indexer.conf:

Server http://www.site.ru/
Alias  http://www.site.ru/  http://www.other.com/mirrors/site.ru/

search.cgi будет указывать ссылки с главного сайта http://www.site.ru/, но индексатор будет брать данные с зеркала http://www.other.com/mirrors/site.ru/.

Другой пример. Допустим, вы хотите индексировать весь домен udm.net. И один из серверов этого домена, http://home.udm.net/, расположен на локальном диске в каталоге /home/httpd/htdocs/. Чтобы это настроить нужно добавить следующее:

Realm http://*.udm.net/
Alias http://home.udm.net/ file:/home/httpd/htdocs/

Индексатор скачает home.udm.net с локального диска,а другие сайты скачает по HTTP.


3.7.2. Алиасы для различных частей сервера

Алиасы просматриваются в порядке их появления в indexer.conf. Таким образом можно создавать алиасы для сервера и для отдельных его частей:

# Первое - создадим алиас для каталога /stat/ , который физически находится 
# не на ожидаемом месте по умолчанию:
Alias http://home.udm.net/stat/  file:/usr/local/stat/htdocs/

# Затем создадим алиас для всего остального сервера:
Alias http://home.udm.net/ file:/usr/local/apache/htdocs/

Замечание: Обратите внимание на то, что при изменении порядка следования команд, алиас для каталога/stat/ никогда не будет обработан.


3.7.3. использование алиасов в команде Server

Возможно указание расположения данных для выборки индексером используя дополнительный аргумент команды Server:

Server  http://home.udm.net/  file:/home/httpd/htdocs/


3.7.4. Использование алиасов в команде Realm

Алиасы в команде Realm command являются очень мощным инструментом при использовании регулярных выражений. Результат работы такой команды подобен работе функции PHP preg_replace(). Алиасы в команде Realm работают только при использовании "regex" типов сравнений и не работают для "string" типов сравнений.

Синтаксис Realm алиасов:

Realm regex <URL_выражение> <алиас_выражение>

Индексатор пропускает URL на совпадение с URL_выражение строит алиас используя алиас_выражение. алиас_выражение может содержать ссылки вида $n. n - это число в диапазоне 0-9. Каждая такая ссылка заменяется текстом, взятым из n-ого по счету regex-выражения в круглых скобках. При этом $0 ссылается на текст которому соответствует все выражение целиком. Выражения в круглых скобках нумеруются слева направо (начиная с 1).

Пример: пусть ваша фирма хостит несколько тысяч пользователей и их доменов вида www.username.yourname.com. Сайт каждого пользователя расположен на диске в подкаталоге "htdocs" относительно домашнего каталога пользователя: /home/username/htdocs/.

Для правильной настройки нужно следующее (напоминаем, что символ '.' имеет специальное значение в регулярных выражениях и должен быть экранирован использованием символа '\' в тех случаях, когда символ точки необходимо испольховать в своем обычном значении):

Realm regex (http://www\.)(.*)(\.yourname\.com/)(.*)  file:/home/$2/htdocs/$4

Представим процесс индексации страницы http://www.john.yourname.com/news/index.html . Он построит пять ссылок - от $0 до $4:

   $0 = 'http://www.john.yourname.com/news/index.htm' (сожержит все выражение удовлетворяющее regex целиком)
   $1 = 'http://www.'      соответствует подвыражению '(http://www\.)'
   $2 = 'john'             соответствует подвыражению '(.*)'
   $3 = '.yourname.com/'   соответствует подвыражению '(\.yourname\.com/)'
   $4 = '/news/index.html' соответствует подвыражению '(.*)'

Затем индексатор построит алиас используя $2 and $4 ссылки:

file:/home/john/htdocs/news/index.html

и использует этот результат для получения документа.


3.7.5. Команда AliasProg

AliasProg - еще одна команда для построения алиасов. Иногда альтернативное расположение документов на локальном диске может быть слишком сложным, чтобы описать его с помощью команд Alias или Realm. AliasProg - это внешняя исполняемая программа, которая принимает в качестве аргумента URL, и возвращает его алиас на STDOUT. Используйте $1 чтобы передать значение URL.

Например, эта команда использует программу replace из дистрибутива MySQL для замены подстроки http://www.apache.org/ на подстроку file:/usr/local/apache/htdocs/:

AliasProg  "echo $1 | /usr/local/mysql/bin/mysql/replace http://www.apache.org/ file:/usr/local/apache/htdocs/"


3.7.6. Команда ReverseAlias

Команда ReverseAlias позволяет видоизменить URL документа сразу же после того, как найдена ссылка на него.

ReverseAlias http://name2/   http://name2.yourname.com/
Server       http://name2.yourname.com/

В это примере все ссылки с коротким именем сервера будут преобразованы в ссылки с полным именем сервера. Это произойдет сразу же после обнаружения "короткой" ссылки, а в базу данных попадет документ с уже длинным именем сервера в адресе.

Еще одно возможное применение команды ReverseAlias - это вырезание различных ненужных кусков адреса, например PHPSESSION=XXXX.

Например, для вырезания параметра PHPSESSION из URL типа http://www/a.php?PHPSESSION=XXX, если PHPSESSION - единственный параметр, будет выглядеть так (знак ? будет вырезан тоже):

ReverseAlias regex  (http://[^?]*)[?]PHPSESSION=[^&]*$   $1

Чтобы вырезать PHPSESSION, когда он является первым параметром, при условии, что после него следуют другие параметры, т.е. http://www/a.php?PHPSESSION=xxx&.., используйте эту команду:

ReverseAlias regex  (http://[^?]*[?])PHPSESSION=[^&]*&(.*)  $1$2
Знак '&' после аргумента PHPSESSION будет вырезан, а знак вопроса не будет.

Для вырезания из URL типа http://www/a.php?a=b&PHPSESSION=xxx или http://www/a.php?a=b&PHPSESSION=xxx&c=d, где PHPSESSION не является первым параметром, используйте

ReverseAlias regex  (http://.*)&PHPSESSION=[^&]*(.*)   $1$2
Знак '&' перед PHPSESSION будет тоже вырезан.


3.7.7. Команда ReverseAliasProg

ReverseAliasProg - команда, аналогичная обеим командам AliasProg и ReverseAlias. Она получает параметры аналогично команде AliasProg, но преобразовывет URL перед вставкой в базу, аналогично команде ReverseAlias.


3.7.8. Алиасы в search.htm

Вы также можете использовать алиасы и в search.htm. Команда Alias в search.htm аналогична такой же команде в indexer.conf, но работате во время поиска, а не во время индексации.

Синтаксис команды также аналогичен команде в indexer.conf:

Alias <find-prefix> <replace-prefix>

Например, пусть в search.htm есть такая команда:

Alias http://localhost/ http://www.site.ru/

Пусть поиск вернул страницу с адресом http://localhost/news/article10.html В результате, появится переменная $(Alias), которую значение которой будет равным http://www.site.ru/news/article10.html


3.8. ServerTable

DataparkSearch поддерживает команду ServerTable в indexer.conf.


3.8.1. Загрузка таблицы серверов

Когда задана команда ServerTable mysql://user:pass@host/dbname/tablename[?srvinfo=infotablename], indexer будет загружать информацию о серверах из указаной SQL таблицы tablename, а параметры этих серверов из таблицы infotablename. Если параметр srvinfo не указан, параметры загружаются из таблицы с именем srvinfo. См. структуру этих таблиц в файле create/mysql/create.txt. Если для вашей базы данных нет соответствующего скрипта со структурой этой таблицы, возьмите этот файл в качестве образца.

Вы можете использовать несколько команд ServerTable для загрузки информации о серверах из различных таблиц.


3.8.2. Структура таблицы серверов

Таблица серверов содержит поля для описания всех необходимых параметров серверов. Имена полей соответсвуют командам в indexer.conf. Например, поле period соответсвует команде Period в indexer.conf. Значения полей по умолчанию равны значениям по умолчанию соответсвующих параметров из indexer.conf.

Поле gindex соответсвует команде Index. Имя слегка изменено во избежания использования зарезервированного в SQL имени.

Зачения некоторых полей расшифрованы в Разд. 9.3>.

Замечание: Из таблицы серверов считываются только те записи, для которых значение поля active равно 1, а поле значение поля parent равно 0. Это даёт возможность пользователям добавлять новые URL в таблицу серверов, а администраторам - авторизовать добавленные записи.


3.8.3. Команда FlushServerTable

Сбрасывает server.enabled в неактивное состояние для всех записей таблицы серверов. Используйте эту команду для деактивирования всех команд в таблице серверов перед загрузкой новых из indexer.conf или из другой таблицы серверов.


3.9. Внешние парсеры

DataparkSearch indexer может использовать внешние парсеры для различных типов файлов (MIME types).

Парсер - это программа, которая конвертирует один из типов файла (mime type) в text/plain или text/html. Например, если у вас есть PostScript файлы, Вы можете использовать парсер (фильтр) ps2ascii, читающий из stdin PostScript файл и выдающий текст в ascci на stdout.


3.9.1. Поддерживаемые типы парсеров

Indexer поддерживает четыре типа парсеров, такие что:

  • читают данные из stdin и выдают результат в stdout;

  • читают данные из файла и выдают результат в stdout;

  • читают данные из файла и помещают результат в файл;

  • читают данные из stdin и помещают результат в файл.


3.9.2. Установка парсеров

  1. Конфигурирование типов файлов (mime types)

    Сконфигурируйте Ваш веб-сервер на выдачу соответствующего заголовка Content-Type. Например, для apache, смотрите файл mime.types, большинство типов файлов уже указаны в нём.

    Если необходимо индексировать файлы на локальной файловой системе, или используя протокол ftp используйте команду AddType в indexer.conf для привязки типа файла к расширению файлов. Например:

    AddType text/html *.html

  2. Добавление парсеров

    Добавление строк с определениями парсеров. Эти строки имеюют следующий формат с треми аргументами:

    Mime <from_mime> <to_mime> [<command line>]

    Например, следующая строка определяет парсер для man-страниц:

    # Use deroff for parsing man pages ( *.man )
    Mime  application/x-troff-man   text/plain   deroff

    Этот парсер будет получать данные из stdin и повещать результат в stdout.

    Некоторые парсеры не могут работать с stdin, а требуют указания имени файла для чтения данных. В этом случае indexer создаёт временный файл в директории /tmp, который будет удалён после завершения работы парсера. Используйте макро $1 в командной строке парсера вместо требуемого имени файла. Например, команда Mimeдля конверотора catdoc, преобразующего файлы MS Word в ascii может выглядеть так:

    Mime application/msword text/plain "/usr/bin/catdoc -a $1"

    Если парсер записывает результат своей работы в файл, используйте макро $2. indexer заменить $2 на имя временного файла, запустит парсер, прочитает результат из этого временного файла, а затем удалит его. Например:

    Mime application/msword text/plain "/usr/bin/catdoc -a $1 >$2"

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

    Если параметр <command line> опущен, это означает, что два MIME-типа являются синонимами. Например, некоторые сайты отдают MP3 файлы с неправильным MIME-типом application/mp3. Вы можете исправить его на корректный audio/mpeg и тем самым обработать его:

    Mime application/mp3 audio/mpeg


3.9.3. Воизбежание зависания парсера при выполнении

Воизбежание подвисания парсера при выполнении Вы можете указать в Вашем файле indexer.conf число времени в секундах, отводимое на работу парсеру, при помощи команды ParserTimeOut. Напрмиер:

ParserTimeOut 600

Значение по умолчанию - 300 секунд, т.е. 5 минут.


3.9.4. Конвееры в командных строках парсеров

Вы можете использовать конвееры в командных строках парсеров. Например, следующие строки необходимы при индексировании загнузипленых страниц man на локальном диске:

AddType  application/x-gzipped-man  *.1.gz *.2.gz *.3.gz *.4.gz
Mime     application/x-gzipped-man  text/plain  "zcat | deroff"


3.9.5. Кодировки и парсеры

Некоторые парсеры могут выдавать результат в кодировке, отличной от указанной в команда LocalCharset. Указание кодировки парсера даёт возможность indexer перекодировать результат в нужную кодировку. Например, если catdoc сконфигурирован на вывод результата в windows-1251, а в LocalCharset указана кодировка koi8-r, используйте следующую команду для парсера документов MS Word:

Mime  application/msword  "text/plain; charset=windows-1251" "catdoc -a $1"


3.9.6. Переменная окружения DPS_URL

При выполнении парсера, indexer создаёт переменную окружения DPS_URL, содержащую URL обрабатываемого документа. Вы можете использовать эту переменную в Ваших скриптах парсеров.


3.9.7. Некоторые внешние парсеры

  • RPM парсер от Mario Lang

    /usr/local/bin/rpminfo:

    #!/bin/bash
    /usr/bin/rpm -q --queryformat="<html><head><title>RPM: %{NAME} %{VERSION}-%{RELEASE}
    (%{GROUP})</title><meta name=\"description\" content=\"%{SUMMARY}\"></head><body>
    %{DESCRIPTION}\n</body></html>" -p $1

    indexer.conf:

    Mime application/x-rpm text/html "/usr/local/bin/rpminfo $1"

    Он даёт такую информацию об RPM:

    3. RPM: mysql 3.20.32a-3 (Applications/Databases) [4]
           Mysql is a SQL (Structured Query Language) database server.
           Mysql was written by Michael (monty) Widenius. See the CREDITS
           file in the distribution for more credits for mysql and related
           things....
           (application/x-rpm) 2088855 bytes

  • catdoc конвертер MS Word в текст. Home page, также указан на Freshmeat

    indexer.conf: Mime application/msword  text/plain  "catdoc $1"

  • xls2csv конвертор MS Excel в текст. Поставляется в пакете catdoc.

    indexer.conf: Mime application/vnd.ms-excel text/plain "xls2csv $1"

  • pdftotext конвертор Adobe PDF в текст. Поставляется в пакете xpdf. Homepage, также указан на Freshmeat

    indexer.conf: Mime application/pdf text/plain "pdftotext $1 -"

  • unrtf конвертор RTF в html. Homepage

    indexer.conf:
    Mime text/rtf*        text/html "/usr/local/dpsearch/sbin/unrtf --html $1
    Mime application/rtf  text/html "/usr/local/dpsearch/sbin/unrtf --html $1

  • xlhtml конверотор XLS в html

    Homepage

    indexer.conf:

    
Mime	application/vnd.ms-excel  text/html  "/usr/local/dpsearch/sbin/xlhtml $1"

  • ppthtml Конвертор PowerPoint (PPT) в html. Часть проекта xlhtml 0.5.

    Homepage

    indexer.conf:

    
Mime	application/vnd.ms-powerpoint  text/html  "/usr/local/dpsearch/sbin/ppthtml $1"

  • Использование vwHtml Конвертор MS Word (DOC) в html.

    /usr/local/dpsearch/sbin/0vwHtml.pl:

    #!/usr/bin/perl -w
    
    $p = $ARGV[1];
    $f = $ARGV[1];
    
    $p =~ s/(.*)\/([^\/]*)/$1\//;
    $f =~ s/(.*)\/([^\/]*)/$2/;
    
    system("/usr/local/bin/wvHtml --targetdir=$p $ARGV[0] $f");

    indexer.conf:

    
Mime  application/msword       text/html  "/usr/local/dpsearch/sbin/0wvHtml.pl $1 $2"
    Mime  application/vnd.ms-word  text/html  "/usr/local/dpsearch/sbin/0wvHtml.pl $1 $2"

  • swf2html из Flash Search Engine SDK

    indexer.conf:

    
Mime  application/x-shockwave-flash  text/html  "/usr/local/dpsearch/sbin/swf2html $1"

  • djvutxt из djvuLibre

    indexer.conf:

    
Mime  image/djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
    Mime  image/x.djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
    Mime  image/x-djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
    Mime  image/vnd.djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"

Пожалуйста, присылайте Ваши скрипты и конфигурации для новых парсеров на адрес .


3.9.8. Библиотека libextractor

DataparkSearch может быть собран с библиотекой libextractor. При помощи этой бибилиотеки DataparkSearch может индексировать ключевые слова из файлов следующих форматов: PDF, PS, OLE2 (DOC, XLS, PPT), OpenOffice (sxw), StarOffice (sdw), DVI, MAN, FLAC, MP3 (ID3v1 and ID3v2), NSF(E) (NES music), SID (C64 music), OGG, WAV, EXIV2, JPEG, GIF, PNG, TIFF, DEB, RPM, TAR(.GZ), ZIP, ELF, S3M (Scream Tracker 3), XM (eXtended Module), IT (Impulse Tracker), FLV, REAL, RIFF (AVI), MPEG, QT и ASF.

Чтобы собрать DataparkSearch с библиотекой libextractor, установите библиотеку, а затем сконфигурируйте и соберите DataparkSearch.

Ниже приводится соответствие между типами keyword в libextractor версии до 0.6 и именами секций DataparkSearch:

Таблица 3-1. Соответствие между типами keyword библиотеки libextractor и именами секций DataparkSearch

Тип KeywordИмя секции
EXTRACTOR_FILENAME Filename
EXTRACTOR_MIMETYPE Mimetype
EXTRACTOR_TITLE Title
EXTRACTOR_AUTHOR Author
EXTRACTOR_ARTIST Artist
EXTRACTOR_DESCRIPTION Description
EXTRACTOR_COMMENT Comment
EXTRACTOR_DATE Date
EXTRACTOR_PUBLISHER Publisher
EXTRACTOR_LANGUAGE Content-Language
EXTRACTOR_ALBUM Album
EXTRACTOR_GENRE Genre
EXTRACTOR_LOCATION Location
EXTRACTOR_VERSIONNUMBER VersionNumber
EXTRACTOR_ORGANIZATION Organization
EXTRACTOR_COPYRIGHT Copyright
EXTRACTOR_SUBJECT Subject
EXTRACTOR_KEYWORDS Meta.Keywords
EXTRACTOR_CONTRIBUTOR Contributor
EXTRACTOR_RESOURCE_TYPE Resource-Type
EXTRACTOR_FORMAT Format
EXTRACTOR_RESOURCE_IDENTIFIER Resource-Idendifier
EXTRACTOR_SOURCE Source
EXTRACTOR_RELATION Relation
EXTRACTOR_COVERAGE Coverage
EXTRACTOR_SOFTWARE Software
EXTRACTOR_DISCLAIMER Disclaimer
EXTRACTOR_WARNING Warning
EXTRACTOR_TRANSLATED Translated
EXTRACTOR_CREATION_DATE Creation-Date
EXTRACTOR_MODIFICATION_DATE Modification-Date
EXTRACTOR_CREATOR Creator
EXTRACTOR_PRODUCER Producer
EXTRACTOR_PAGE_COUNT Page-Count
EXTRACTOR_PAGE_ORIENTATION Page-Orientation
EXTRACTOR_PAPER_SIZE Paper-Size
EXTRACTOR_USED_FONTS Used-Fonts
EXTRACTOR_PAGE_ORDER Page-Order
EXTRACTOR_CREATED_FOR Created-For
EXTRACTOR_MAGNIFICATION Magnification
EXTRACTOR_RELEASE Release
EXTRACTOR_GROUP Group
EXTRACTOR_SIZE Size
EXTRACTOR_SUMMARY Summary
EXTRACTOR_PACKAGER Packager
EXTRACTOR_VENDOR Vendor
EXTRACTOR_LICENSE License
EXTRACTOR_DISTRIBUTION Distribution
EXTRACTOR_BUILDHOST BuildHost
EXTRACTOR_OS OS
EXTRACTOR_DEPENDENCY Dependency
EXTRACTOR_HASH_MD4 Hash-MD4
EXTRACTOR_HASH_MD5 Hash-MD5
EXTRACTOR_HASH_SHA0 Hash-SHA0
EXTRACTOR_HASH_SHA1 Hash-SHA1
EXTRACTOR_HASH_RMD160 Hash-RMD160
EXTRACTOR_RESOLUTION Resolution
EXTRACTOR_CATEGORY Ext.Category
EXTRACTOR_BOOKTITLE BookTitle
EXTRACTOR_PRIORITY Priority
EXTRACTOR_CONFLICTS Conflicts
EXTRACTOR_REPLACES Replaces
EXTRACTOR_PROVIDES Provides
EXTRACTOR_CONDUCTOR Conductor
EXTRACTOR_INTERPRET Interpret
EXTRACTOR_OWNER Owner
EXTRACTOR_LYRICS Lyrics
EXTRACTOR_MEDIA_TYPE Media-Type
EXTRACTOR_CONTACT Contact
EXTRACTOR_THUMBNAIL_DATA Thumbnail-Data
EXTRACTOR_PUBLICATION_DATE Publication-Date
EXTRACTOR_CAMERA_MAKE Camera-Make
EXTRACTOR_CAMERA_MODEL Camera-Model
EXTRACTOR_EXPOSURE Exposure
EXTRACTOR_APERTURE Aperture
EXTRACTOR_EXPOSURE_BIAS Exposure-Bias
EXTRACTOR_FLASH Flash
EXTRACTOR_FLASH_BIAS Flash-Bias
EXTRACTOR_FOCAL_LENGTH Focal-Length
EXTRACTOR_FOCAL_LENGTH_35MM Focal-Length-35MM
EXTRACTOR_ISO_SPEED ISO-Speed
EXTRACTOR_EXPOSURE_MODE Exposure-Mode
EXTRACTOR_METERING_MODE Metering-Mode
EXTRACTOR_MACRO_MODE Macro-Mode
EXTRACTOR_IMAGE_QUALITY Image-Quality
EXTRACTOR_WHITE_BALANCE White-Balance
EXTRACTOR_ORIENTATION Orientation
EXTRACTOR_TEMPLATE Template
EXTRACTOR_SPLIT Split
EXTRACTOR_PRODUCTVERSION ProductVersion
EXTRACTOR_LAST_SAVED_BY Last-Saved-By
EXTRACTOR_LAST_PRINTED Last-Printed
EXTRACTOR_WORD_COUNT Word-Count
EXTRACTOR_CHARACTER_COUNT Character-Count
EXTRACTOR_TOTAL_EDITING_TIME Total-Editing-Time
EXTRACTOR_THUMBNAILS Thumbnails
EXTRACTOR_SECURITY Security
EXTRACTOR_CREATED_BY_SOFTWARE Created-By-Software
EXTRACTOR_MODIFIED_BY_SOFTWARE Modified-By-Software
EXTRACTOR_REVISION_HISTORY Revision-History
EXTRACTOR_LOWERCASE Lowercase
EXTRACTOR_COMPANY Company
EXTRACTOR_GENERATOR Generator
EXTRACTOR_CHARACTER_SET Meta-Charset
EXTRACTOR_LINE_COUNT Line-Count
EXTRACTOR_PARAGRAPH_COUNT Paragraph-Count
EXTRACTOR_EDITING_CYCLES Editing-Cycles
EXTRACTOR_SCALE Scale
EXTRACTOR_MANAGER Manager
EXTRACTOR_MOVIE_DIRECTOR Movie-Director
EXTRACTOR_DURATION Duration
EXTRACTOR_INFORMATION Information
EXTRACTOR_FULL_NAME Full-Name
EXTRACTOR_CHAPTER Chapter
EXTRACTOR_YEAR Year
EXTRACTOR_LINK Link
EXTRACTOR_MUSIC_CD_IDENTIFIER Music-CD-Identifier
EXTRACTOR_PLAY_COUNTER Play-Counter
EXTRACTOR_POPULARITY_METER Popularity-Meter
EXTRACTOR_CONTENT_TYPE Ext.Content-Type
EXTRACTOR_ENCODED_BY Encoded-By
EXTRACTOR_TIME Time
EXTRACTOR_MUSICIAN_CREDITS_LIST Musician-Credits-List
EXTRACTOR_MOOD Mood
EXTRACTOR_FORMAT_VERSION Format-Version
EXTRACTOR_TELEVISION_SYSTEM Television-System
EXTRACTOR_SONG_COUNT Song-Count
EXTRACTOR_STARTING_SONG Strting-Song
EXTRACTOR_HARDWARE_DEPENDENCY Hardware-Dependency
EXTRACTOR_RIPPER Ripper
EXTRACTOR_FILE_SIZE File-Size
EXTRACTOR_TRACK_NUMBER Track-Number
EXTRACTOR_ISRC ISRC
EXTRACTOR_DISC_NUMBER Disc-Number

Если секция из списка выше не указана в файле sections.conf, значение ключевого слова соответствующего типа будет записано как секция body. Тоже самое относится к ключевым словам неизвестно типа.

Для libextractor 0.6.x в качестве имен секций используются значения, возвращаемые функцией EXTRACTOR_metatype_to_string.


3.10. Остальные команды, используемые в indexer.conf

3.10.1. Команда Include

Вы можете включить другой конфигурационный файл в любом месте файла indexer.conf при помощи команды Include <filename>. Путь считается абсолютным, если <filename> начинается с "/":

Include /usr/local/dpsearch/etc/inc1.conf

В противном случае пусть считается относительным:

Include inc1.conf


3.10.2. Команда DBAddr

Команда DBAddr является описание хранилища данных в URL-подобном стиле. Она определяет параметры (тип, хост, имя базы данных, порт, имя пользователя и пароль и т.д.) для соединения с SQL-сервером или другим хранилищем данных. Может быть задано несколько хранилищ данных. Но все команды DBAddr должны быть указаны первыми в файле конфигурации, до любой другой команды. Формат команды:

DBAddr <DBType>:[//[DBUser[:DBPass]@]DBHost[:DBPort]]/DBName/[?[dbmode=mode]{&<имя параметра>=<значение параметра>}]

Замечание: об ODBC. Используйте DBName для задания имени источника данных (DSN) ODBC. DBHost не имеет значения, используйте localhost.

Замечание: о Solid. Используйте DBHost для указания сервера Solid. DBName не имеет значения для Solid.

Вы можете использовать URL-кодирование для DBUser и DBPass, если вам необходимо использовать специальные символы в пароле или имени пользователя. Например, если у вас пароль ABC@DEF, его необходимо указывать в виде ABC%40DEF.

На данный момент поддерживаются следующие значения DBType: mysql, pgsql, msql, solid, mssql, oracle, ibase, sqlite. Actually, it does not matter for native libraries support. But ODBC users should specify one of supported values. If your database type is not supported, you may use "unknown" instead.

Пользователи MySQL и PostgreSQL могут указывать путь до Unix-сокета при соединении с localhost: mysql://foo:bar@localhost/dpsearch/?socket=/tmp/mysql.sock

Если вы используете PostgreSQL и не указываете имя хоста, т.е. pgsql://user:password@/dbname/ в этом случае PostgreSQL не будет работать по TCP, а будет использовать стандартный Unix-сокет.

Параметр dbmode. Вы также можете указать способ хранения слов. Если указан "single", все слова сохраняются в одной таблице (файле). Если указан"multi", слова будут храниться в разных таблицах (файлах) в зависимости от длины этих слов. Режим "multi" обычно быстрее, но требует больше таблиц (файлов). Если выбран режим "crc", DataparkSearch будет сохранять вместо слов их 32-битное целые идентификаторы, вычисленные при помощи CRC32 алгоритма. Этот режим требует меньше дискового пространства и быстрее по сравнению с режимами "single" и "multi", однако он не поддерживает поиск подстрок. Режим "crc-multi" использует туже самую структуру, как и режим "crc", но еще сохраняет идетификаторы слов в различных таблицах (файлах) в зависимости от длины этих слов, аналогично режиму "multi". По умолчанию используется режим "single".

Параметр stored. Формат:stored=StoredHost[:StoredPort]. Этот параметр служит для указания адреса хоста, на котором запущен демон stored, хранящий копии документов, относящихся к этому хранилищу.

Параметр cached. Формат:cached=CachedHost[:CachedPort]. Этот параметр служит для указания адреса хоста, на котором запущен демон cached. Используется только для способа хранения cache (см.Разд. 5.2>). Каждый раз indexer будет при старте соединятся с cached по заданному адресу.

Параметр charset. Формат:charset=DBCharacterSet. Этот параметр может быть использован для задания кодировки соединения с базой данных. Кодровка, задаваемая в этом параметре должна совпадать с кодирокой, заданой командой LocalCharset.

Параметр label. Format: label=DBAlabel. Этот параметр может быть использован для назначения метки команде DBAddr. Таким образом, если вы передадите DataparkSearch CGI-переменную label, тогда только DBAddr, помеченная значением параметра label будет использоваться при выполнении поиска. Следовательно, вы можете использовать одного демона searchd для ответа на поисковые запросы по нескольким поисковым база, выбираемым по значению параметра label.

Замечание: Если не передано CGI-параметра label, в этом случае только DBAddr без пометки label будет использоваться для выполнения поискового запроса.

Пример:

DBAddr          mysql://foo:bar@localhost/search/?dbmode=single


3.10.3. Команда VarDir

Вы можете задать альтернативную директорию для данных способа хранения cache и данных stored:

VarDir /usr/local/dpsearch/var


3.10.4. Команда NewsExtensions

Включает расширенную поддержку групп новостей. Значение по умолчанию no.

NewsExtensions yes


3.10.5. Команда SyslogFacility

Может быть использована, если Datapark был скомпилировал с поддержкой syslog и вы хотите изменить значение по умолчанию. Задаваемое значение должно быть одним из описаных в файле syslog.conf. См. syslog.conf(5).

SyslogFacility local7


3.10.6. Команды указания длины слова

Вы можете указать диапазон длин слов, сохраняемых в базе. По умолчанию, сохраняются слова длиной от 1 до 32 символов.

MinWordLength 1
MaxWordLength 32


3.10.7. Команда MaxDocSize

Эта команда служит для указания максимального размера документа. Значение по умалчанию: 1048576 (1 Mb). Имеет глобальный эффект.

MaxDocSize 1048576


3.10.8. Команда MinDocSize

Данная команда включает режим только проверки наличия (CheckOnly) для документов размером менее указанного. Значение по умолчанию: 0. Имеет глобальный эффект.

MinDocSize 1024


3.10.9. Команда IndexDocSizeLimit

Используйте эту команду для задания максимального размера данных, записываемых в индекс для одного документа. Значение по умолчанию: 0. Это обозначает без ограничений. Команда действует до следующей команды IndexDocSizeLimit.

IndexDocSizeLimit 65536


3.10.10. Команда URLSelectCacheSize

Задаёт число документов отбираемых для индексации за раз. Значение по умолчанию: 1024.

URLSelectCacheSize 10240


3.10.11. Команда URLDumpCacheSize

Задаёт число документов отбираемых за раз для записи индексов cache mode, загрузки данных в searchd или для расчёта индекса популярности. Значение по умолчанию: 100000.

URLDumpCacheSize 10240


3.10.12. Команда UseCRC32URLId

Включает или выключает генерацию ID для URL используя алгоритм HASH32. Значение по умолчанию: "no".

UseCRC32URLId yes


3.10.13. Команда HTTPHeader

Вы можете добавить свои собсвенные заголовки в запрос HTTP на получение документов к индексации. Вы не можете вказывать таким образом заголовки "If-Modified-Since" или "Accept-Charset", эти заголовки формируются indexerом самостоятельно. Заголовок "User-Agent: DataparkSearch/version" также формируется самостоятельно, но вы можете заменить его. Command has global effect for all configuration file.

HTTPHeader "User-Agent: My_Own_Agent"
HTTPHeader "Accept-Language: ru, en"
HTTPHeader "From: webmaster@mysite.com"


3.10.14. Команда Allow

Allow [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ]

Данная команда разрешает к индексирования URL, подпадающие под указаный шаблон. Первые три необязательных параметра задают тип сравнения. Значения по умолчанию: Match, NoCase, String. Используйте NoCase или Case чтобы указать чувтсвительное или нечувствительное к регистру сравнение. Используйте Regex чтобы выбрать сравнение на основе регулярного выражения. Используйте String чтобы задать сравнение по текстовому шаблону с использование спецсимволов. Возможные спецсимволы: '*' - для обозначения любого числа символов и '?' - для обозначения одного символа. Обратите внимание, что символы '?' и '*' имеют специальное значение при указатии тпа сравнения String. Вы можете использовать Regex для описания документов, содержащих символы '?' и/или '*' в URL. String намного быстрее Regex. Используйте String где это возможно. Вы можете задавать несколько аргументов для одной команды Allow. Вы можете использовать эту команду в любом месте файла конфигурации. Имеет глобальный эффект. Имейте ввиду, что DataparkSearch автоматически добавляет команду Allow regex .* после чтения файла конфигурации. Это означает, что разрешено всё, что не зыпрещено явно.

Примеры

#  Разрешить всё:
Allow *
#  Разрешить всё, исключая расширения .php .cgi .pl не учитывая регист и используя регулярные выражения:
Allow NoMatch Regex \.php$|\.cgi$|\.pl$
#  Разрешить расширение .HTM учитывая регистр:
Allow NoCase *.HTM


3.10.15. Команда Disallow

Disallow [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ]

Данная команда запрещает к индексирования URL, подпадающие под указаный шаблон. Значение первых трёх необязательных параметров такое же как и у команды Allow Вы можете указывать несколько аргументов для одной команды Disallow. Имеет глобальный эффект. Примеры:

# Disalow URLs that are not in udm.net domains using "string" match:
Disallow NoMatch *.udm.net/*
# Disallow any except known extensions and directory index using "regex" match:
Disallow NoMatch Regex \/$|\.htm$|\.html$|\.shtml$|\.phtml$|\.php$|\.txt$
# Exclude cgi-bin and non-parsed-headers using "string" match:
Disallow */cgi-bin/* *.cgi */nph-*
# Exclude anything with '?' sign in URL. Note that '?' sign has a 
# special meaning in "string" match, so we have to use "regex" match here:
Disallow Regex  \?


3.10.16. Команда CheckOnly

CheckOnly [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ]

Значение первый трёх необязательных параметров такое же, как и у команды Allow. Для URL, подпадающих под эту команду, вместо HTTP метода GET indexer будет использовать метод HEAD. Это означает, что будет проверятся только наличие документа, сам же документ скачиваться и индексироваться не будет. Это полезно для zip,exe,arj и других двоичных файлов, например, для организации поиска по имени файла (что-то наподобии ftp-поиска). Вы можете задавать несколько аргументов для одной команды CheckOnly. Имеет глобальный эффект. Примеры:

# Check some known non-text extensions using "string" match:
CheckOnly *.b	  *.sh   *.md5
# or check ANY except known text extensions using "regex" match:
CheckOnly NoMatch Regex \/$|\.html$|\.shtml$|\.phtml$|\.php$|\.txt$


3.10.17. Команда HrefOnly

HrefOnly [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ]

Значение первый трёх необязательных параметров такое же, как и у команды Allow. Используйте эту команду для поиска ссылок в указанных URL. Содержимое самих файлов не индексируется. Команда имеет глобальный эффект. Например, при индексировании почтовых архивов, индесные страницы (типа mail.10.html, thread.21.html, etc.) будут сканировать для поиска ссылок на страницы с письмами, но не будут индексироваться:

HrefOnly */mail*.html */thread*.html


3.10.18. Команда CheckMp3

CheckMp3 [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...]

Значение первый трёх необязательных параметров такое же, как и у команды Allow. Если URL подпадает под эту команду, то indexer скачает небольшую порцию этого документа и попробует найти тэги MP3 в этом фрагменте. При обнаружении, тэги будут проиндексированы. В противном случае, документ будет скачен целиком и обработан в обычном порядке. Замечание: это работает только для серверов, поддерживающих HTTP/1.1, т.е. используется заголовок "Range: bytes".

CheckMp3 *.bin *.mp3


3.10.19. Команда CheckMp3Only

CheckMP3Only [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...]

Эта команда аналогична команде CheckMP3, за исключением: если тэги MP3 не будут обнаружены, документ не скачивается целиком и не обрабатывается.

CheckMP3Only *.bin *.mp3


3.10.20. Команда IndexIf

IndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]

Эта команда служит для разрешения индексирования при совпадении шаблона arg по заданой секции section документа. Значение первых трёх необязательных параметров такое же как и у команды Allow (см. Разд. 3.10.14>).

Пример

IndexIf regex Title Manual
IndexIf body "*important detail*"


3.10.21. Команда NoIndexIf

NoIndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]

Эта команда служит для запрещения индексирования при совпадении шаблона arg по заданой секции section документа. Значение первых трёх необязательных параметров такое же как и у команды Allow (см. Разд. 3.10.14>).

Пример

NoIndexIf regex Title Sex
IndexIf body *xxx*


3.10.22. Команда AllowIf

AllowIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]

Эта команда аналогчна команде Allow (см. Разд. 3.10.14>), однако может применяться к любой секции документа и она применяется уже после того, как документ выкачан и проиндексирован. Команда разрешает присутствие документа в поисковой базе при совпадении шаблона arg по заданой секции section документа. Значение первых трёх необязательных параметров такое же как и у команды Allow.

Пример

IndexIf regex Title Manual
IndexIf body "*important detail*"


3.10.23. Команда DisallowIf

DisallowIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]

Эта команда аналогчна команде Disallow (см. Разд. 3.10.15>), однако может применяться к любой секции документа и она применяется уже после того, как документ выкачан и проиндексирован. Команда удаляет документ из поисковой базы базе при совпадении шаблона arg по заданой секции section документа. Значение первых трёх необязательных параметров такое же как и у команды Allow (см. Разд. 3.10.14>).

Пример

DisallowIf regex Title Sex
DisallowIf body *xxx*


3.10.24. Команда HoldBadHrefs

HoldBadHrefs <time>

Задаёт сколько времени хранить документы с ошибочными кодами статуса перед удалением их из базы. Например, если какой-либо веб-сервер временно недоступен, indexer не удалит страницы этого сервера сразу. Однако, если этот сайт будет недоступен продолжительное время, страницы с этого сайта будут удалены по истечении указаного интервала времени. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.28>.

HoldBadHrefs 30d


3.10.25. Команда DeleteOlder

DeleteOlder <time>

Задаёт сколько времени хранить проиндексированные документы в базе. Например, при индексировании новостных сайтов, вы можете задать период, по истечении которого устаревшие страницы новостей будут удалены из базы, независимо от статуса этих документов. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.28>. Значение по умолчанию: 0, - означает "не проверять". Вы можете указать несколько команд DeleteOlder, например, по одной для каждой команды Server.

DeleteOlder 7d


3.10.26. Команда UseRemoteContentType

UseRemoteContentType yes/no

Данная команда указывает брать ли тип содержимого из заголовков ответа сервера (yes) или определять его на основании комманд AddType, указанных в файле конфигурации (no). Если задано 'no' и по заданым командам AddType определить тип не удаётся, то используется тип из заголовков ответа сервера. Значение по умолчанию: yes.

UseRemoteContentType yes


3.10.27. Команда AddType

AddType [String|Regex] [Case|NoCase] <mime type> <arg> [<arg>...]

Эта команда ассоциирует MIME тип с указаным расширением файла. Эти команды используются при индексировании ссылок со схемой file://. Первые два необязательных параметра используются для задания типа сравнения. По умолчанию используются "String" "NoCase" (нечувствительное к регистру стравнение строк с использованием символов-шаблонов '?' и '*').

AddType image/x-xpixmap	*.xpm


3.10.28. Команда Period

Period <time>

Задаёт период переиндексирования. <time> указывается в формате 'xxxA[yyyB[zzzC]]' (пробелы допустимы между xxx и A и yyy и т.д) здесь xxx, yyy, zzz - числа (возможно отризательные!) A, B, C могут быть одним из следующего: s - секунда M - минута h - час d - день m - месяц y - год (эти символы такие же как и для функций strptime/strftime). Примеры:

 15s - 15 секунд
 4h30M - 4 часа и 30 минут
 1y6m-15d - 1 год и шесть месяцев минус 15 дней
 1h-10M+1s - 1 час минус 10 минут плюс 1 секунда

Если указано только число без какого-либо символа, то подразумевается, что время задано в секундах. Можно задавать несоклько команд Period, например по одной на каждую команду Server.

Period 7d


3.10.29. Команда PeriodByHops

PeriodByHops <hops> [ <time> ]

Задаёт период переиндексирования для страниц зо значением глубины в "мышиных кликах" равным <hops>. Формат для <time> такой же как и для команды Period.

Можно задавать несоклько команд PeriodByHops, например по одной на каждую команду Server. Если параметр <time> опущен, действие указаного ранее значения отменяется.

Если для конретного значения <hops> не задан период переиндексирования командой PeriodByHops, в этом случае используется значение, заданное командой Period.


3.10.30. Команда ExpireAt

ExpireAt [ A [ B [ C [ D [ E ]]]]]

Эта команда позволяет задать точное время устаревания документов. Может задаваться для каждой команда Server/Realm в отдельности, действует до конца файла конфигурации или до следующей команды ExpireAt. ExpireAt указаная без аргументов означает отмену всех ранее указаных значений. A - обозначает минуту, может быть * или 0-59; B - обозначает час, может быть * или 0-23; C - обозначает день месяца, может быть * или 1-31; D - обозначает месяц, может быть * или 1-12; E - обозначает день недели, может быть * или 0-6, 0 - Воскресенье. Команда ExpireAt имеет больший приоритет над командами Period или PeriodByHops.


3.10.31. Команда UseDateHeader

UseDateHeader yes|no|force

Использовать ли заголовок ответа сервера Date если в ответе сервера не содержится заголовок Last-Modified. Если указано значение force, то заголовок Date используется даже если сервер отправляет заголовок Last-Modified. Значение по-умолчанию: no.


3.10.32. Команда LMDSection

LMDSection <section name>

Эта команда задают секцию документа, которая будет использоваться в качестве даты последней модификации документа вместо HTTP-заголовка Last-Modified, отдаваемого удаленным сервером. Может задаваться неоднократно перед каждой командой Server и последнее установленное значение имеет эффект до конца файла конфигурации или до следующей команды LMDSection. Значение по умолчанию не определено. Используйте эту команду без какого-либо аргумента, чтобы вернуться к значению по умолчанию. Если значение заданной этой командой секции не определено, будет использоваться значение HTTP-заголовка Last-Modified.


3.10.33. Команда MaxHops

MaxHops <number>

Максимальная глубина пути в "мышиных кликах" от начального URL. Значение по умолчанию: 256. Может быть задано несколько команд MaxHops, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHops.

MaxHops 256


3.10.34. Команда TrackHops

TrackHops yes|no

Включает или выключает ведение счётчика hops при переиндексировании. Значение по умолчанию: no (выключено). Если включено, то при переиндексировании значение hops для url вычисляется заново, иначе значение hops вычисляется один раз при помещении url в базу.

TrackHops yes


3.10.35. Команда MaxDepth

MaxDepth <number>

Максимальная глубина директории в url. Значение по умолчанию 16. Может быть задано несколько команд MaxDepth, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDepth.

MaxDepth 2


3.10.36. Команда MaxDocsPerServer

MaxDocsPerServer <number>

Ограничивает число документов, выкачиваемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет проиндексировано не более указанного числа документов, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxDocsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDocsPerServer.

MaxDocsPerServer 100


3.10.37. Команда MaxHrefsPerServer

MaxHrefsPerServer <number>

Ограничивает число ссылок, собираемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет собирать не более указанного числа ссылок, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxHrefsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHrefsPerServer.

MaxHrefsPerServer 100


3.10.38. Команда MaxNetErrors

MaxNetErrors <number>

Задаёт максимальное число сетевых ошибок для каждого сервера. Значение по умолчанию: 16. Используйте значение 0 для выключения проверки. Если число ошибок при обращении к какому-то серверу превысит заданое число (например, хост временно не доступен), indexer больше небудет пытаться получить документы с этого сервера. Команда действует до конца файла конфигурации, или до следующей команды MaxNetErrors.

MaxNetErrors 16


3.10.39. Команда ReadTimeOut

ReadTimeOut <time>

Таймаут ожидания соединения или продолжения получения данных. Формат <time> см. Разд. 3.10.28>. Значение по умолчанию: 30 секунд. Команда действует до конца файла, или до следующей команды ReadTimeOut.

ReadTimeOut 30s


3.10.40. Команда DocTimeOut

DocTimeOut <time>

Указывает максимальное время ожидания получения всего документа. Формат <time> см. в Разд. 3.10.28>. Значение по умолчанию: 90 секунд. Команда действует до конца файла, или до следующей команды DocTimeOut.

DocTimeOut 1m30s


3.10.41. Команда NetErrorDelayTime

NetErrorDelayTime <time>

Указывает период, на который будет отложена обработка документа при возникновении сетевых ошибок при его получении. Формат <time> см. в Разд. 3.10.28>. Значение по умолчанию: один день.

NetErrorDelayTime 1d


3.10.42. Команда Cookies

Cookies yes/no

Включает поддерку ключиков HTTP (HTTP cookies). Команда действует до конца файла, или до следующей команды Cookies. Значение по умолчанию: no.

Cookies yes


3.10.43. Команда Section

Section <string> <number> <maxlen> [strict] [ <pattern> <replacement> ]

где <string> - имя секции и <number> - ID секции, от 0 до 255. Используйте 0 если вы не хотите индексировать какую-либо секцию. Лучше всего использовать различные ID для разных секций. В этом случае вы сможете во время поиска задавать различные веса конретным секциям, или же исключать их из результатов поиска. Параметр <maxlen> задаёт максимальный размер секции, который будет сохранён в базе (хотя сама секция будет проиндексирована целиком). Используйте 0, если вы не хотите сохранять в базе значение секции. <pattern> и <replacement> - шаблон и замена, аналогичная используемым в regex, для извления значения секции из тела документа.

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

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

# Standard HTML sections: body, title
Section	body			1	256
Section title			2	128
# строгая токенизация для URL
Section url                     3       0 strict
# шаблон регулярного выражения для секции
Section GoodName                3       128 "<h1>([^<]*)</h1>" "<b>GoodName:</b> $1"

3.10.44. Команда HrefSection

HrefSection <string> [ <pattern> <replacement> ]

где <string> - имя секции, <pattern> и <replacement> - шаблон и замена, аналогичная используемым в regex, для извления значения секции из тела документа. Используйте эту команду для извлечения ссылок из тела документа.

# Standard HTML sections: body, title
HrefSection	link
HrefSection     NewLink "<newlink>([^<]*)</newlink>" "$1"


3.10.45. Команда FastHrefCheck

Команда "FastHrefCheck yes" полезна для ускорения индексирования, если ваш список команд Server/Realm/Subnet огромен, т.к. она выключает проверку ссылок по списку серверов на этапе парсинга страницы.


3.10.46. Команда Index

Index yes/no

Разрешает или запрещает сохранения проиндексированных слов в базу. Применяется, например, при проверке ссылок на страницах сайта или сайтов. Команда действует до конца файла, или до следующей команды Index. Значение по умолчанию: yes. Prevent indexer from storing words into database.

Index no


3.10.47. Команда ProxyAuthBasic

ProxyAuthBasic login:passwd

Задаёт имя пользователя и пароль для авторизации http proxy basic или SOCKS5 username. Может быть указана перед каждой командой Server, но действует только для этой команды!. Может также использовать перед командой Proxy. Примеры:

ProxyAuthBasic somebody:something  


3.10.48. Команда Proxy

Proxy [http|socks5] your.proxy.host[:port]

Вместо прямого соединения, использовать прокси-соединение. Вы можете задать тип прокси: HTTP или SOCK5. HTTP прокси используется по умолчанию. Значение номера порта по умолчанию: 3128 (Squid). Команда действует до конца файла, или до следующей команды Proxy. Если не указано ни одной команды Proxy, или для этой команды не указан хост - используется прямое соединение. Примеры:

#           Proxy on atoll.anywhere.com, port 3128:
Proxy atoll.anywhere.com
#           Proxy on lota.anywhere.com, port 8090:
Proxy lota.anywhere.com:8090
#           Proxy on local Tor
Proxy socks5 localhost:9050
#           Disable proxy (direct connect):
Proxy


3.10.49. Команда AuthBasic

AuthBasic login:passwd

Включает использование basic http authorization. Может быть указана перед каждой командой Server, но действует только для этой команды!. Примеры:

AuthBasic somebody:something  

# If you have password protected directory(ies), but whole server is open,use:
AuthBasic login1:passwd1
Server http://my.server.com/my/secure/directory1/
AuthBasic login2:passwd2
Server http://my.server.com/my/secure/directory2/
Server http://my.server.com/


3.10.50. Команда ServerWeight

ServerWeight <number>

Задаёт вес Server для расчёта Popularity Rank (см. Разд. 8.5.3>). Значение по умолчанию: 1.

ServerWeight 1


3.10.51. Команда OptimizeAtUpdate

OptimizeAtUpdate yes

Задаёт стратегию оптимизации индекса слов. Значение по умолчанию: no. Если включено, позволяет экономить дисковое пространство, однако замедляет процесс индексирования. Может указываться и в indexer.conf и в cached.conf.


3.10.52. Команда SkipUnreferred

SkipUnreferred yes|no|del

Значение по умолчанию: no. Используйте эту команду для пропуска переиндексации или для удаления документов, на которые никто не ссылается. Для этой команды требуется включить сбор ссылок (см. Разд. 8.5.3>).


3.10.53. Команда Bind

Bind 127.0.0.1

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


3.10.54. Команда ProvideReferer

ProvideReferer yes

Используйте эту команду для передачи заголовка запроса Referer: для HTTP и HTTPS соединений.


3.10.55. Команда LongestTextItems

LongestTextItems 4

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


3.10.56. Команда MakePrefixes

При помощи команды MakePrefixes yes вы можете указать indexer автоматически создавать префиксы для всех индексируемых слов. В частности, это можно использовать при создании поисковых подсказок.


3.11. Расширенные возможности индексирования

3.11.1. Расширенные возможности индексирования новостей

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

  • Сконфигурировать DataparkSearch с поддержкой схемы news://, вернее не выключать её (она включается по умолчанию)

  • В файл конфигурации indexer.conf добавить команду NewsExtensions yes и следующие команды Section:

    Section Header.References 18 0
    Section Header.Message-ID 19 0
    Section Header.Parent-ID  20 0
    Вы также можете добавить для индексации и хранения в таблице urlinfo любого заголовка новостей, например, Header.Subject или Header.From.

Во время своей работы indexer в этом режиме в дополнение будет для каждого сообщения новостей определять Parent-ID (идентификатор статьи, на которую отвечает данное сообщение) и добавлять пары (Parent-ID, ID) в таблицу ссылок links.


3.11.2. Индексирование таблиц SQL баз данных (виртуальная URL схема htdb:)

DataparkSearch позволяет индексировать текстовые поля SQL баз данных используя так называемую виртуальную URL схему htdb:.

Используя виртуальную URL схему htdb:/ вы можете создать полный индекс текстовых полей вашей SQL базы данных, а также вашего WWW сервера, использующего SQL для хранения информации.

Замечание: Необходимо иметь PRIMARY индекс для таблиц, которые вы собираетесь индексировать.


3.11.2.1. HTDB команды в indexer.conf

Для поддержки HTTDB в indexer.conf используются пять команд: HTDBAddr, HTDBList, HTDBLimit, HTDBDoc и HTDBText.

Команда HTDBAddr служит для описания соединения с базой данных, таблицу или таблицы которой вы собираетесь индексировать. Её систаксис совпадает с синтаксисом команды DBAddr.

HTDBList - это SQL запрос генерирования списка всех URL, соответсвующих записям в таблице по полю PRIMARY индекса. В команде HTDBList вы можете использовать и относительные и абсолютные URL.

Например:

HTDBList "SELECT concat('htdb:/',id) FROM messages"
    или
HTDBList "SELECT id FROM messages"

Команда HTDBLimit задаёт максимальное число записей, считываемых из базы за один раз. Это позволяет избежать черезмерного использования памяти при индексировании больших таблиц. Пример:

HTDBLimit 512

HTDBDoc - это запрос для получения из базы записи, определенной по первичному ключу.

SQL запрос HTDBList используется для все URL, заканчивающихся символом '/'. Для остальных URL используется SQL запрос из HTDBDoc.

Замечание: Запрос HTDBDoc должен возвращать ПОЛНЫЙ HTTP ответ с заголовками. Таким образом вы можете гибко управлять вашей системой индексирования выдавая различные HTTP коды статуса. См. Разд. 3.2> для информации о реакции indexer на различные коды статуса HTTP.

Если по запросу HTDBDoc не будет найдено ни одной записи, система выборки HTDB сгенерирует ответ "HTTP 404 Not Found". Это может произойти при переиндексировании, если запись была удалена из вашей базы данных с момента предыдущего индексирования. Вы можете использовать команду HoldBadHrefs 0 для удаления информации о таких записях и из таблиц DataparkSearch.

Вы можете использовать несколько команд HTDBDoc/List в одном файле indexer.conf с различными соответсвующими им командами Server.

HTDBText <section> - это запрос для получения из базы простого текста, соответсвующего первичному ключу, полученному при помощи команды HTDBList. Параметр <section> задаёт имя секции, под которой этот текст будет индексироваться. Такой запрос может возращать несколько строк с данными, если это необходимо. Вы можете указать несколько команд HTDBText для каждой команды Server или Realm.

DBAddr mysql://foo:bar@localhost/database/?dbmode=single

HTDBAddr mysql://foofoo:barbar@localhost/database/

HTDBList "SELECT DISTINCT topic_id FROM messages"

HTDBText body "SELECT raw_text\
FROM messages WHERE topic_id='$1'"

Server htdb:/

Возможно задавать одновременно обе команды HTDBDoc и HTDBText для одной команды Server или Realm. В этом случае сначала обрабатываются команды HTDBText.


3.11.2.2. Переменные HTDB

Вы можете использовать части пути в URL в качестве параметров для обоих SQL запросов HTDBList и HTDBDoc. Все части используются как $1, $2, ... $n, где число n - число поддиректорий в пути:

htdb:/part1/part2/part3/part4/part5/
         $1    $2    $3    $4    $5

Например, пусть в indexer.conf указана команду:

HTDBList "SELECT id FROM catalog WHERE category='$1'"

При использовании URL htdb:/cars/, $1 будет заменено на 'cars':

SELECT id FROM catalog WHERE category='cars'

Вы можете использовать длинные URL при передаче нескольких параметров для обоих SQL запросов HTDBList и HTDBDoc. Например, htdb:/path1/path2/path3/path4/id с запросом:

HTDBList "SELECT id FROM table WHERE field1='$1' AND field2='$2' and field3='$3'"

Это запрос создаст списое таких URL:

htdb:/path1/path2/path3/path4/id1
...
htdb:/path1/path2/path3/path4/idN

для всех значений поля id в результате выполенния запроса HTDBList.

Для команд HTDBDoc и HTDBtext возможно указать свой regex-шаблон для сопоставления индексируемого URL с переменными HTDB:

HTDBText header "SELECT header FROM news WHERE section=$1 AND article=$2" "^/section/([0-9]+)/art/([0-9]+)\.html"

в этом случае regex-шаблон сопоставляется с полным путем и именем файла индексируемого URL.

Для команды HTDBText можно использовать и мета-переменные шаблона страницы выдачи (например, $(DP_ID), $(URL)) для формирования SQL-запроса, например:

HTDBText hint "SELECT hint FROM hints WHERE url = '$(url)'"


3.11.2.3. Создание текстового индекса

Используя схему htdb:/ вы можете создать текстовый индекс и использовать его в ваших приложениях. Предположим, у вас есть большая SQL таблица, в которой хранятся, например, сообщения электронной доски объявлений в текстовом формате. И пусть вы хотите создать приложение, обладающее возможностью поиска среди этих объявлений. Допустим, сообщения храняться в таблице messages с двумя полями id, используемом в качестве первичного ключа, и msg, в котором собственно и храняться тексты объявлений. Поиск при помощи SQL LIKE операции может занять слишком много времени:

SELECT id, message FROM message WHERE message LIKE '%someword%'

Используя DataparkSearch вы можете создать текстовый индекс по таблице message. Установите DataparkSearch обычным образом. Затем отредактируйте ваш indexer.conf:

DBAddr mysql://foo:bar@localhost/database/?dbmode=single

HTDBAddr mysql://foofoo:barbar@localhost/database/

HTDBList "SELECT id FROM messages"

HTDBDoc "SELECT concat(\
'HTTP/1.0 200 OK\\r\\n',\
'Content-type: text/plain\\r\\n',\
'\\r\\n',\
msg) \
FROM messages WHERE id='$1'"

Server htdb:/

После запуска indexer вставить URL 'htdb:/' в базу и выполнит SQL запрос, указанный в HTDBList. В результате вы получим значения 1,2,3, ..., N. Эти значения будут рассматриваться как ссылки относительно URL 'htdb:/'. Список новый URL в виде htdb:/1, htdb:/2, ... , htdb:/N будет добавлен в базу. Затем SQL запрос HTDBDoc будет выполнен для каждого из вновь добавленных URL. HTDBDoc создаст HTTP документ в виде:

HTTP/1.0 200 OK
Content-Type: text/plain

<some text from 'message' field here>

Этот документ будет использован для создания текстового индекса по словам из полей 'message'. Слова будут сохранены в таблице 'dict' (предполагая, что используется способ хранения 'single').

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

SELECT url.url 
FROM url,dict 
WHERE dict.url_id=url.rec_id 
AND dict.word='someword';

Так как таблица 'dict' имеет индекс по полю 'word', этот запрос будет выполнен быстрее, нежели запрос с использованием SQL LIKE оператора при запросе по таблице 'messages'.

Вы также можете задать несколько слов при поиске:

SELECT url.url, count(*) as c 
FROM url,dict
WHERE dict.url_id=url.rec_id 
AND dict.word IN ('some','word')
GROUP BY url.url
ORDER BY c DESC;

Оба запроса вернут значения 'htdb:/XXX' в поле urll.url. Ваше приложение может отбросить 'htdb:/' для получения значения первичного ключа таблицы 'messages'.


3.11.2.4. Индексирование веб-сервера, использующего SQL базу данных

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

Основная идея похожа на создание текстового индекса, за исключением того, что поиск должен давать реальные URL вместо URL в виде 'htdb:/...'. Это достигается при помощи механизма алиасов DataparkSearch.

Команда HTDBList создаёт URL в форме:

http://search.site.ext/board/message.php?id=XXX

где XXX - значение первичного ключа таблицы "messages".

Для каждого значения первичного ключа команда HTDBDoc создаёт text/html документ с HTTP заголовком примерно такого вида:

<HTML>
<HEAD>
<TITLE> ... subject field here .... </TITLE>
<META NAME="Description" Content=" ... author here ...">
</HEAD>
<BODY> ... message text here ... </BODY>

В конце doc/samples/htdb.conf даны три команды:

Server htdb:/
Realm  http://search.site.ext/board/message.php?id=*
Alias  http://search.site.ext/board/message.php?id=  htdb:/

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

http://search.site.ext/board/message.php?id=XXX

Вторая команда позволяет indexer принимать такие URL сообщений.

Третья команда заменяет в URL подстроку "htdb:/" на подстроку "http://search.site.ext/board/message.php?id=" при получении документа с сообщением. Что обозначает, что URL в виде "http://mysearch.udm.net/board/message.php?id=xxx" будет показан в результате поиска, хотя при индексировании будет использован URL "htdb:/xxx", где xxx - значение первичного ключа, ID записи в таблице "messages".


3.11.3. Индексирование вывода программ (виртуальные схемы URL exec: и cgi:)

DataparkSearch поддерживает виртуальные URL схемы exec: и cgi:, позволяющие запускать внешнюю программу. Эта программа должна выдавать результат своей работы в stdout. Результат должен быть оформлен по стандарту HTTP, т.е. заголовок ответа HTTP, а за ним содержимое документа.

Например, при индексировании обоих cgi:/usr/local/bin/myprog и exec:/usr/local/bin/myprog, indexer будет выполнять программу /usr/local/bin/myprog.


3.11.3.1. Передача параметров для виртуальный схемы cgi:

При выполнении программы по виртуальной схеме cgi:, indexer эмулирует выполнение из-под HTTP сервера. Он создаёт переменную окружения REQUEST_METHOD со значением "GET" и переменную QUERY_STRING в соответствии со стандартами HTTP. Например, при индексировании cgi:/usr/local/apache/cgi-bin/test-cgi?a=b&d=e indexer создаёт QUERY_STRING со значением a=b&d=e. Виртуальная URL схема cgi: позволяет индексировать ваш сайт без веб-сервера, даже если необходимо индексировать CGI скрипты. Например, если для вашего веб-сервера статические документы находятся в /usr/local/apache/htdocs/, а CGI скрипты в /usr/local/apache/cgi-bin/, используёте следующую конфигурацию:

Server http://localhost/
Alias  http://localhost/cgi-bin/	cgi:/usr/local/apache/cgi-bin/
Alias  http://localhost/		file:/usr/local/apache/htdocs/


3.11.3.2. Передача параметров для виртуальной схемы exec:

indexer не создаёт переменной окружения QUERY_STRING как для схемы cgi:. Он создаёт командную строку с аргументами, указанными в URL после занка ?. Например, при индексировании exec:/usr/local/bin/myprog?a=b&d=e, будет выполнена слудующая команда с параметрами:

/usr/local/bin/myprog "a=b&d=e" 


3.11.3.3. Использование виртуальной URL схемы exec: в качестве внешней системы получения

Виртуальную URL схему exec: можно использовать в качестве внешней системы получения документов. Это позволяет использовать для получения документов протоколы, не поддерживаемые DataparkSearch. Например, можно испрользовать программу curl, доступную с http://curl.haxx.se/ для индексирования HTTPS сайтов.

Поместите этот короткий скрипт в /usr/local/dpsearch/bin/ под именем curl.sh.

#!/bin/sh
/usr/local/bin/curl -i $1 2>/dev/null

Этот скрипт берёт URL, указанный в качестве параметра командной строки и выполняет программу curl для получения этого документа. Ключ -i говорит curl выводить результат вместе с HTTP заголовками.

Теперь вы можете использовать такие команды в вашем indexer.conf:

Server https://some.https.site/
Alias  https://  exec:/usr/local/dpsearch/etc/curl.sh?https://

При индексировании https://some.https.site/path/to/page.html, indexer преобразует этот URL в

exec:/usr/local/dpsearch/etc/curl.sh?https://some.https.site/path/to/page.html

выполнит скрипт curl.sh:

/usr/local/dpsearch/etc/curl.sh "https://some.https.site/path/to/page.html"

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


3.11.4. Зеркалирование

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

MirrorRoot /path/to/mirror

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

MirrorHeadersRoot /path/to/headers

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

MirrorPeriod <time>

Зеркалирование очень полезно когда вы экспериментируете с индексированием DataparkSearch одних и тех же хостов и не хотите создавать много трафика в/из интернета. Если не задан MirrorHeadersRoot и тем самым заголовки не сохраняются на локальном диске, тогда тип файлов определяется по значениям, заданным командами AddType. Значение MirrorPeriod по умолчанию равно -1, что означает не использовать зеркалированые файлы.

<time> указывается в форме xxxA[yyyB[zzzC]] (пробелы допускаются между xxx и A и yyy и т.д.), где xxx, yyy, zzz - числа (могут быть отрицательными!). A, B, C могут быть одним из:

		s - секунда
		M - минута
		h - час
		d - день
		m - месяц
		y - год

(эти буквы такие же, как и в функциях strptime/strftime)

Примеры:

15s - 15 секунд
4h30M - 4 часа и 30 минут
1y6m-15d - 1 год и шесть месяцев минус 15 дней
1h-10M+1s - 1 час минус 10 минут плюс 1 секунда

Если указано только число без какой-либо буквы, считается, что время указано в секундах (это сделано для совместимости с версиями, младше 3.1.7).

Следующая команда задаёт использование локальных копий в течении одного дня:

MirrorPeriod 1d

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

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


3.11.5. Сбор данных

Используя команду ActionSQL вы можете выполнять SQL-запросы с данными документа во время индексирования. Команда ActionSQL имеет следующий синтаксис:

ActionSQL [add | update | delete] <section> <pattern> <sql-template> [<dbaddr>]
где <section> - имя секции, содержимое которой будет проверяться на соответствие шаблону регулярного выражения <pattern>, если соответствие будет найдено, то будет заполнен шаблон sql-запроса <sql-template>, в котором наряду с мета-переменными регулярного выражения $1-$9 можно использовать и мета-переменные шаблона страницы выдачи (например, $(title), $(Last-Modified)). Заполненый sql-запрос будет выполнен в первом DBAddr, указанном в файле конфигурации, или в новом соединении с sql-базой, задаваемой необязательным параметром <dbaddr>.

Одина из опций add, update или delete задает когда эта команда выполняется, при индексировании нового документа, при переиндексировании, или при удалении документа. Если не указана ни одна опция, подразумеваетя опция add по умолчанию.

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

ActionSQL add body "\(([0-9]{3})\)[ ]*([0-9]{3})[- \.]*([0-9]{2})[- \.]*([0-9]{2})" "INSERT INTO phonedata(phone,title,id)VALUES('+7$1$2$3$4','$(title)',$(dp_id))"
ActionSQL update body "\(([0-9]{3})\)[ ]*([0-9]{3})[- \.]*([0-9]{2})[- \.]*([0-9]{2})" "UPDATE phonedata SET phone='+7$1$2$3$4',title='$(title)' WHERE id=$(dp_id)"
ActionSQL delete url "." "DELETE FROM phonedata WHERE id=$(dp_id)"


3.12. Использование syslog

Все приложения DataparkSearch по-умолчанию используют syslog для протоколирования своих действий, ошибок и прочих сообщений. indexer поддерживает несколько уровней подробности выдачи сообщений, которые могут быть заданы поцией -v или командой LogLevel в файле конфигурации:

Таблица 3-2. уровни подробности сообщений indexer'а

0SILENTПодавить весь вывод
1ERRORтолько критические ошибки
2WARNINGпредупреждения
3INFOСообщения информационного характера. Используется по-умолчанию.
4EXTRAДополнительный информационный вывод
5DEBUGОтладочный вывод

Параллельно с записью в syslog, indexer так же производит вывод на stdout/stderr. Чтобы подавить этот вывод, например, при запуске из cron, используйте опцию -l. Если Вы не хотите использовать syslog, то при запуске configure можно указать флаг --disable-syslog. Собраный таким образом, indexer будет использовать только stdout/stderr для вывода своих сообщений.

Syslog использует различные "facilities", чтобы направлять вывод от разных програм в разные логи. По-умолчанию indexer исполтьзует facility LOCAL7, который можно поменять во время сборки, указав configure опцию --enable-syslog=LOG_FACILITY. LOG_FACILITY должен быть правильным именем facility, которые обычно перечислены в заголовочном файле /usr/include/sys/syslog.h

Вы можете отредактировать файл /etc/syslog.conf, чтобы перенаправить сообщения DataparkSearch в желаемые файлы. Например,

# Log all messages from DataparkSearch to separate file
local7.*        -/var/log/DataparkSearch.log

Еще пример:

# Send all DataparkSearch messages to host named central
# Syslog on central should be configured to allow this
local7.*        @central

По-умолчанию, все сообщения пишутся так же в лог-файл /var/log/messages. Чтобы избежать этого, добавьте local7.none or local7.!* (игнорировать любые сообщения с facility local7) в Ваши 'catch-all' лог-файлы.

For example:

#
# Some `catch-all' logfiles.
#
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none;\
        local7.!*               -/var/log/messages

Для получения более подробной справки о syslog и его конфигурации, посмотрите страницы man syslogd(8) и syslog.conf(5).


3.13. Хранение сжатых копий документов

DataparkSearch имеет возможность хранения сжатых копий проиндексированных документов. Копии сжимаются и хранятся при помощи нового демона - stored, который устанавливается в поддиректорию sbin корневой директории установки DataparkSearch (по умолчанию: /usr/local/dpsearch/sbin).

В DataparkSearch можно хранить сжатые копии документов без использования демона stored. Для этого вместо настройки параметров stored в файле конфигурации indexer.conf необходимо указать команду DoStore yes.

Сохраненные копии документов отображаются отдельной CGI-программой storedoc.cgi. Эта программа получает сохранённую копию от stored и отображает содержимое этого документа в окне броузера предварительно выделив слова из поискового запроса.

Для использования возможностей stored, скомпилируйте DataparkSearch с поддержкой zlib:

./configure --with-zlib <other arguments>

Вы можете использовать команды Store и NoStore для разрешения или запрещения сохранения некоторых фалов по шаблону. Аргументы у этих команд точно такиеже, как и у команды Allow (см. Разд. 3.10.14>). Все документы сохраняются по умолчанию, если включена поддержка stored.


3.13.1. Конфигурирование stored

Перед использованием stored, пожалуйста, проделпйте следующее:

  • Скопируйте /usr/local/dpsearch/etc/stored.conf-dist в /usr/local/dpsearch/etc/stored.conf.

    Отредактируйте /usr/local/dpsearch/etc/stored.conf

    Следующие команды используются для конфигурирования stored:

    • Listen говорит stored к какому адресу и/или порту привязаться. По умолчанию, stored привязывается к порту 7004 и каждому адресу. Возможно указывать только порт:

      Listen 7004

      Или только адрес:

      Listen 127.0.0.2

      Или оба, алрес и порт:

      Listen 127.0.0.2:7004

    • VarDir задаёт альтернативную рабочую директорию var/, например:

      VarDir /mnt/d/dpsearch/var/

    • StoredFiles указывает число файлов-хранилищ, создаваемых в директории var/stored/, например:

      StoredFiles 256

    • OptimizeInterval задаёт интервал в секундах между попытками оптимизировать очередной файл-хранилище, например:

      OptimizeInterval 300

    • OptimizeRatio задаёт уровень дефрагментации в процентах, по достижении которого файл-хранилище оптимизируется, например:.

      OptimizeRatio 3

  • Запустите stored:

    /usr/local/dpsearch/sbin/stored &

  • Отредактиируйте indexer.conf и search.htm (или searchd.conf, если используется searchd). Укажите адрес и порт, кроторые indexer будет использовать для связи с stored. Используйте параметр stored команды DBAddr, например:

    DBAddr mysql://localhost/search/?dbmode=cache&stored=localhost:7004


3.13.2. Как работает stored

После того, как вы сконфигурируете и запустите stored, indexer будет передавать ему проиндексированные документы. А stored будет сжимать полученные документы и сохранять их на диске.


3.13.3. Использование stored при поиске

Для включения отображения сохраненных документов при поиске, проделайте следующее:

  • Отредактируйте storedoc.htm (шаблон для storedoc.cgi), если необходимо.

  • Добавьте в секцию <!--res--> шаблона search.htm ссылку на storedoc.cgi, например: <A HREF="$(stored_href)">Cached copy</A>

  • Укажите URL CGI-программы storedoc.cgi в search.htm (по умолчанию $(stored_href) будет возвращать /cgi-bin/storedoc.cgi). Если вам необходимо указать другой URL, добавьте в раздел переменных шаблона search.htm следующую строку:

    StoredocURL /path/to/storedoc.cgi

    Или для абсолютной ссылки:

    StoredocURL http://servername/path/to/storedoc.cgi

Если все сконфигурировано правильно, при поиске stored работает следующим образом:

  1. search.htm показывает ссылку на storedoc.cgi;

  2. Когда пользователь кликает по ссылке, storedoc.cgi посылает запрос к демону stored по адресу, указанному в storedoc.htm при помощи параметра stored команды DBAddr;

  3. По этому запросу, stored находит и разжимает запрошенную копию и отправляет ее storedoc.cgi;

  4. storedoc.cgi разбирает полученный документ и выделяет все слова из поискового запроса. Способ выделения указывается в шаблоне storedoc.htm командами HlBeg and HlEnd;


3.13.4. Цитаты документов

stored также используется для создания цитат документов на основе слов из запроса.

Для задания приблизительного размера цитаты в символах, используйте в search.htm (в секции variables) команду ExcerptSize. Значение, используемое по умолчанию, равно 256.

С помощью команды ExcerptPadding вы можете задать примерное число символов, возвращаемых в цитате перед и после найденного слова запроса; значение по умолчанию: 40.

При помощи команды ExcerptMark вы можете изменить разделяющую последовательность символов, вставляемую между частями цитаты с ключевыми словами; значение по умолчанию: " ... " (пробел, многоточие, пробел).

Вы можете выключить создание цитат (но сохранив возможность показа сохраненных копий) документов указав команду DoExcerpt no в вашем поисковом шаблоне.


Глава 4. HTML-парсер в DataparkSearch

4.1. Tag-парсер

Tag-парсер понимает тэги в следующей нотации:

  • < ... parameter=value ... >

  • < ... parameter="value" ... >

  • < ... parameter='value' ... >


4.2. Специальные символы

indexer понимает следующие специальные символы HTML:

  • &lt; &gt; &amp; &nbsp; &quot;

  • Все ссылки на символы, принятые в HTML-4: &auml; &uuml; и др.

  • Символы с использованием Unicode: &#234;


4.3. META-тэги

В настоящий момент HTML-парсер обрабатывает специальным образом следующие META-тэги.

Замечание: наряду с <META "NAME">ниже также обрабатываются и <META "HTTP-EQUIV">и <META "PROPERTY">

  • <META NAME="Content-Type" Content="text/html; charset=xxxx"> Этот тэг используется для определения кодировки документа, если она не была указана в заголовке Content-type HTTP-ответа.

  • <META NAME="REFRESH" Content="5; URL=http://www.somewhere.com"> URL, указанный в параметре, будет поставлен в очередь на индексацию.

  • <META NAME="Keywords" Content="xxx">

  • <META NAME="Description" Content="xxx">

  • <META NAME="Robots" Content="xxx">, где Content содержит список из следующий ключевых слов, разделенных запятой: ALL, NONE, INDEX, NOINDEX, FOLLOW, NOFOLLOW, NOARCHIVE.

  • <META NAME="DP.PopRank" Content="xxx"> где значение Content - вещественное число. Этот тэг используется для задания начального значения PopularityRank для страницы.


4.4. Ссылки

HTML-парсер распознает гипертекстовые ссылки следующих типов:

  • <A HREF="xxx">

    <A HREF="xxx" DATA-EXPANDED-URL="yyy" DATA-ULTIMATE-URL="zzz">

    Приоритет атрибутов при выборе ссылки: data-ultimate-url, data-expanded-url, href.

  • <IMG SRC="xxx">

  • <LINK HREF="xxx">

  • <FRAME SRC="xxx">

  • <AREA HREF="xxx">

  • <BASE HREF="xxx">

    Замечание: Если <BASE HREF> содержит некорректно сформированный URL, то для формирования относительных ссылок будет использовано текущее расположение документа.

Однако вы можете указать список HTML тэгов, которые будут пропущены при поиске новых ссылок, при помощи команды SkipHrefIn.

SkipHrefIn "img, link, script"

По умолчанию, DataparkSearch не учитывает ссылки с атрибутом rel=nofollow. Но вы можете изменить это поведение при помощи команды "DisableRelNoFollow yes", которую необходимо указать в файле конфигурации indexer.conf.


4.5. Комментарии

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

  • Текст между <!-- .... --> считается HTML-комментарием.

  • Текст между тэгами <!--UdmComment--> .... <!--/UdmComment--> становится невидимым для индексации.

  • Также, предусмотрено использование <NOINDEX> ... </NOINDEX> в качестве синонимов для <!--UdmComment--> и <!--/UdmComment-->

  • Для совместимости с ASPSeek, <!--noindex--> ... <!--/noindex--> также являются синонимами для <!--UdmComment--> и <!--/UdmComment-->

  • Специальные комментарии Google <!-- google_ad_section_start -->, <!-- google_ad_section_start(weight=ignore) --> и <!-- google_ad_section_end --> рассматриваются как тэги для включения/исключения контента из индексирования.


4.6. Шаблоны для индексирования

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

BodyPattern "<!--content-->(.*)<!--/content-->" "$1"
этот шаблон будут извлекать контент между двумя специальными комментариями, и только этот контен будет проиндексирован для этой страницы.

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

Команда BodyBrackets аналогична команде BodyPattern, но задает два маркера: начала контента и конца контента, например:

BodyBrackets "<!--B-->" "<!--E-->"
При этом фрагмент документа заключенный между <!--B--> и <!--E--> будет считаться телом документа.


4.7. Sub-documents

Поддокументами являются: содержимое фреймов и внедряемых объектов (как правило, flash-роликов), временные редиректы (зачастую используются для установки кук или перенаправления на страницу в зависимости от языка предпочтений пользователя), версии одного и того же документа на разных языках, отдаваемые с использованием Content nehotiation.

Управление индексированием поддокументов осуществляется двумя командами: команда SubDocLevel задает максимальный уровень вложенности индексируемых поддокументов. Значение по умолчанию равно 0, что запрещает индексирование поддокументов. Команда SubDocCnt задает максимальное число индексируемых поддокументов всех уровней вложенности (эта команда предназначена в основном для предотвращения бесконечных циклов вложенности страниц друг в дуга). Значение по умолчанию равно 5.


Глава 5. Хранение данных

5.1. SQL режимы хранения

5.1.1. Общая инфоромация о хранении

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


5.1.2. Разнообразные способы хранения слов

На данный момент DataparkSearch поддерживает следующие способы хранения слов для SQL серверов: "single", "multi", "crc", "crc-multi", "cache". Режимом по умолчанию является "cache". Способ задаётся параметром dbmode команды DBAddr, указываемой в файлах конфигурации indexer.conf и search.htm.

Примеры:
DBAddr mysql://localhost/search/?dbmode=single
DBAddr mysql://localhost/search/?dbmode=multi
DBAddr mysql://localhost/search/?dbmode=crc
DBAddr mysql://localhost/search/?dbmode=crc-multi

5.1.3. Способ хранения single

Если указан режим хранения "single", все слова сохраняются в одной таблице (или текстовом файле, для втсроенной базы данных) со структурой (url_id,word,weight), где url_id - идентификатор документа, равный значению поля rec_id таблицы "url". Word имеет SQL тип variable char(32).


5.1.4. Способ хранения multi

Если выбран способ хранения "multi", слова будут сохранены в 13 различных таблицах, в зависимости от их длины. Структура этих таблиц идентична структуре таблицы для способа хранения "single", только для Word используется тип char фиксированной длины, что даёт выигрыш в скорости для большинства баз данных. Это делает режим "multi" более быстрым, по сравнению с "single". Этот режим не реализован для встроенной базы данных.


5.1.5. Способ хранения crc

Если выбран способ хранения "crc", DataparkSearch вместо слов будет сохранять их индентификатора, вычесленные как CRC32 сумма от этих слов. Этот режим хранения использует меньше дискового пространства и работает быстрее способов хранения "single" и "multi". Наши тесты показали, что только 250 пар слов из списка в 1.600.000 уникальных слов имеют одинаковую CRC32 сумму. Большая часть этих пар (>90%) содержит по меньшей мере одно слово с ошибкой. Инфоромация о каждом слове хранится в следующей структуре (url_id,word_id,weight), где word_id - 32-битовый идентификатор слова, посчитаный как его CRC32 сумма. Этот режим хранения рекомендуется для больших поисковиков.


5.1.6. Способ хранения crc-multi

Если выбран способ хранения "crc-multi", DataparkSearch хранит CRC32 идентификаторы в нескольких таблицах (или двоичных файлах для встроенной базы данных) с такой же структурой, как и для способа хранения "crc", и в зависимости от лины слова, как при режиме хранения "multi". Обычно это самый быстрый способ и рекомендован для больших поисковиков.


5.1.7. Замечание о стуктуре таблиц для SQL серверов

Учтите, что мы разрабатываем DataparkSearch с использованием PostgreSQL в качестве SQL сервера и зачастую не имеем возможности тестировать каждую новую версию со всеми поддерживаемыми базами данных. Т.е., если для вашей базы данных нет соответсвующей структуры таблиц в директории create/you_database, возьмите в качестве образца структуру для PostgreSQL и создайте по аналогии структуру для вашей базы данных. Структура для PostgreSQL всегда поддерживается в обновлённом состоянии.


5.1.8. Дополнительные возможности не-CRC режимов хранения

Режимы хранения single и multi поддерживают поиск подстрок. Т.к. при использовании режимов хранения crc и crc-multi хранятся не слова сами по себе, а только их CRC-идентификаторы, то осуществить поиск подстрок не представляется возможным.


5.2. Способ хранения Cache

5.2.1. Введение

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


5.2.2. Структура индексов слов при способе хранения Cache

Основная идея способа хранения слов cache заключается в хранении индекса слов и вспомогательной информации о документах непосредственно на диске, а не в SQL базе данных. Вся информация об URL (таблицы url и urlinfo) тем не менее продолжает храниться в SQL базе данных. Индекс слов разделён на несколько файлов, число которых может быть задано при помощи команды WrdFiles (по умолчанию - 0x300). Число файлов хранения дополнительной информации о документах задаётся командой URLDataFiles (по умолчанию - 0x300).

Внимание: вы должны иметь одинаковые значения для WrdFiles и URLDataFiles во всех файлах конфигурации.

Индекс слов находится в файлах, расположенных в поддиректории /var/tree относительно корневой директории установки DataparkSearch. Вспомогательная информация о документах храниится в файлах, расположенных в поддиректории /var/url относительно корневой директории установки DataparkSearch.

indexer и cached используют буферы в памяти для кэширования данных cache mode перед записью их на диск. Размер таких буферов может быть изменен при помощи команд CacheLogWords и CacheLogDels в файлах конфигурации indexer.conf и cached.conf соответственно. Значения по умолчанию: 1024 для CacheLogWords и 10240 для CacheLogDels. Оценка объема памяти, используемой под эти буферы может быть вычислена как:

Volume = WrdFiles * (16 + 16 * CacheLogWords + 8 * CacheLogDels), для 32-битных систем
Volume = WrdFiles * (32 + 20 * CacheLogWords + 12 * CacheLogDels), для 64-битных систем

5.2.3. Утилиты для способа хранения Cache

При выборе способа хранения cache используются две дополнительные программы: cached и splitter.

cached - демон, получающий по сети информацию о хранимых словах от indexer и записывает её на ваш жёсткий диск. Этот демон может работать в двух режимах, как старый демон cachelogd, входивший в предыдущие версии и только записывающий получаемую информацию на диск, и в новом режиме, в котором объединены функции cachelogd и splitter.

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


5.2.4. Запуск способа хранения cache

Для запуска режима хранения cache проделайте следующее:

  1. Запустите демон cached:

    cd /usr/local/dpsearch/sbin

    ./cached 2>cached.out &

    Он будет писать некоторую отладочную информацию в файл cached.out. cached также создаст файл cached.pid в поддиректории /var относительно корневой директории установки DataparkSearch.

    cached может принимать соединения по TCP от нескольких различных машин. Теоритический предел одновременных соединений равен 128. В старом режиме cached записывает полученную от indexer информацию в поддиректорию /var/splitter/ относительно корневой директории установки DataparkSearch. В новом режиме он записывает информацию в поддиректорию /var/tree/.

    По умолчанию, cached запускается в новом режиме. Для запуска в старом режиме, т.е. только для получения и сохранения на диске информации, получаемой от indexer, запустите его с ключом -l.

    cached -l

    Или укажите команду LogsOnly yes в вашем cached.conf.

    Вы можете указать другой порт для cached без перекомпиляции. Для этого хапустите

    ./cached -p8000

    где 8000 - номер порта по вашему выбору.

    Вы также можете указать другую директорию для записи информации (по умолчанию это поддиректория /var) выдав такую команду:

    ./cached -w /path/to/var/dir

  2. Сконфигурируйте indexer.conf как обычно, указав cache в качестве параметра dbmode команды DBAddr и localhost:7000 в качестве параметра cached (см. Разд. 3.10.2>).

  3. Запустите один или несколько indexer. Несколько indexer могут быть запущены одновременно. Вы можете запускать indexer с различных машин, но работающих с одним сервером cached. Это позволяет проводить ускоренное распределенное индексирование.

  4. Сброс буферов cached и данных об url, а также создание лимитов по завершении процесса индексирования. Пошлите сигнал -HUP для cached. Вы можете использовать файл cached.pid для этого:

    kill -HUP `cat /usr/local/dpsearch/var/cached.pid`

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

  5. Создание индекса слов. Этот шаг не требуется, если cached запущен в новом, объединённом, режиме. Когда соберётся достаточное количество информации в поддиреткории /var/splitter/, можно создать индексы для быстрого поиска слов.Программа splitter предназначена для этого. Она устанавливается в поддиректорию /sbin. Индексы для поиска слов могут создаваться в любое время без остановки процесса индексирования.

    Создание индекса слов. Запустите splitter без каких либо ключей: /usr/local/dpsearch/sbin/splitter

    Он последовательно обработает все файлы из поддиректории /var/splitter/ строя на их основе индекс слов для быстрого поиска. После этой обработки файлы в поддиректории /var/splitter/ усекаются.


5.2.5. Использование нескольких splitter одновременно

splitter имеет два ключа: -f [first file] -t [second file], задающих границы обрабатываемых файлов. Если эти параметры не указаны, splitter последовательно обрабатывает все приготовленные файлы. Вы можете ограничить обрабатываемое количество задав ключами -f и -t параметры в HEX нотации. Например, splitter -f 000 -t A00 создаст индекс слов только из фалёлов с диапазона с 000 по A00. Используя эти ключи можно запускать одновременно несколько splitter. Что обычно позволяет ускорить создание общего индекса. Например, этот шеловский скрипт запускает в фоне четыре splitter:

#!/bin/sh
splitter -f 000 -t 3f0 &
splitter -f 400 -t 7f0 &
splitter -f 800 -t bf0 &
splitter -f c00 -t ff0 &

5.2.6. Использование скрипта run-splitter

В поддиректории /sbin находится скрипт run-splitter. Он помогает последовательно выполнить все шаги по построению индекса слов для быстрого поиска.

run-splitter имеет два параметра командной строки:

run-splitter --hup --split

или в короткой форме:

run-splitter -k -s

Каждый параметр запускает соответсвующий шаг создания индекса слов. run-splitter выполняет все шаги созданяи индекса в правильной последовательности:

  1. Посылка сигнала -HUP к cached. Этому соответствует парамет --hup (или -k).

  2. Запуск splitter. Этому соответсвует параметр --split (или -s).

В большинстве случаев достаточно просто запустить скрипт run-splitter со всеми параметрами -k -s. Раздельное использование этих параметров редко необходимо.

run-splitter имеет необязательные параметры -p=n и -v=m для задания соответсвенно паузы в секунда после обработки каждого буффера и указания выдачи сообщений. n - число секунд (по умолчанию 0), m - уровень выдачи (по умолчанию 4).


5.2.7. Поиск

Для использования search.cgi со способом хранения "cache", сконфигурируйте ваш шаблон search.htm как обычно, добавив "cache" в качестве значения параметра dbmode команды DBAddr


5.2.8. Использование лимитов при поиске

Для применения лимитов при поиске с использование способа хранения cache, необходимо добавить соответсвующие команды Limit в ваши indexer.conf (или cached.conf, если используется cached) и search.htm или searchd.conf (если используется searchd).

Limit prm:type [SQL-Request [DBAddr]]

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

Limit t:tag
Limit c:catategory
Limit site:siteid

где t - имя CGI параметра (&t=) этого ограничения, tag - тип ограничения.

Вместо tag/category/siteid в примере выше вы можете использовать значения из следующей таблицы:

Таблица 5-1. Типы предопределенных лимитов способа хранения Cache

categoryЛимит по категории.
tagЛимит по тэгу.
timeЛимит по времени (с точностью до часа).
languageЛимит по языку.
contentЛимит по MIME-типу.
siteidЛимит по url.site_id (по имени сервера).
linkЛимит по документам, ссылающимся на указаный url.rec_id.
hostname (устаревшее)Лимит по имени сервера. Это устаревшая команда, вытесненная лимитом по site_id

Если для команды Limit указан второй, необязательный, параметр SQL-Request, то при построении индекса будет выполнятся заданный запрос к SQL-базе. Этот запрос должен возращать все возможные пары значение лимита и соответсвующее ему значение url.rec_id. Например:

Limit prm:strcrc32 "SELECT label, rec_id FROM labels" pgsql://u:p@localhost/sitedb/
здесь prm - имя лимита и имя CGI-параметра, используемого для задания ограничения по этому лимиту; strcrc32 - тип используемого лимита, в данном случа - строка. Вместо strcrc32 возможно использовать следующие типы:

Таблица 5-2. Типы SQL-лимитов способа хранения Cache

hex8strШестнадцатеричная строка, или строка в base-26, аналогичная используемым в лимите по категории. В этом случае строится вложенный лимит.
strcrc32Строка символов, по которой расчитывается значение hash32, служащее ключом этого лимита.
intЦелое (4-байтовое) число.
hourЦелое (4-байтовое) число секунд с начала эпохи. Значение с точностью до часа.
minuteЦелое (4-байтовое) число секунд с начала эпохи. Значание с точность до минуты.

Третьим, необязательным, параметром DBAddr для команды Limit можно указать соединение к SQL-базе, отличной от базы, используемой для поиска.

В поисковом шаблоне search.htm или в файле конфигурации searchd.conf (если используется searchd) указывать необязательные параметры SQL-Request и DBAddr не нужно, они используются только при построении лимита.

Limit prm:strcrc32


5.3. К вопросу производительности DataparkSearch

Способ хранения cache - самый быстрый в DataparkSearch. Используйте его, если хотите получить максимальную скорость поиска.

Если после окончания индексирования содержимое вашей директории /var не изменяется, вы можете выключить блокировку файлов при открытиии используя команду "ColdVar yes" в файле search.htm (или в файле searchd.conf, если используется searchd). Это позволит вам сэкономить некоторое время, затрачиваемое на блокировку файлов.


5.3.1. Рекомендация использовать searchd

Если вы планируете использовать синонимы, стоп-слова или данные ispell, рекомендуется воспользоваться демоном searchd (См. Разд. 5.4>). Демон searchd при запуске загружает эти данные и держит их в памяти. Это позволяет сократить среднее время выполнения запросов на поиск.

Таже searchd может загружать предварительно в память некоторые данные об URL (по 20 байт на каждую проиндекированую страницу) и лимиты cache mode (4 или 8 байт на каждый URL в зависимости от типа лимита). Это позволяет сократить среднее время обработки запроса.


5.3.2. Кэширование результатов поиска

Используйте команду "Cache yes" в вашем поисковом шаблоне search.htm (или в файле конфигурации searchd.conf, если используется searchd) для включения кэша результатов поиска. Это позволит значительно сократить время поиска при повторных запросах.

Если вы используете кэширование результатов поиска, пожалуйста, не забудьте очищать директорию var/cache после каждого сеанса индексирования/переиндексирования.


5.3.3. Рекомендация использовать файловую систему в памяти (mfs)

Если вы планируете использовать cache mode и имеете достаточно оперативной памяти на вашем компьютере, вы можете разместить директорию /usr/local/dpsearch/var на файловой системе в памяти компьютера (mfs). Это ускорит как индексирование, так и поиск.

Если памяти недостаточно, что поместить в ней /usr/local/dpsearch/var целиком, вы можете разместить на mfs любую из директорий /usr/local/dpsearch/var/tree, /usr/local/dpsearch/var/url или /usr/local/dpsearch/var/store.


5.3.4. Команда URLInfoSQL

Для способа хранения cache вы можете использовать команду URLInfoSQL no для выключения сохранения информации об URL в SQL-базе. Однако использовав эту команду, вы потеряете возможность использовать лимиты по языку и типу документов.


5.3.5. Команда SRVInfoSQL

При помощи команды SRVInfoSQL no вы можете выключить запись вспомогательной информации в SQL-таблицу "srvinfo". В этом случае содержимое таблицы не может быть использовано для загрузки конфигурации командой LoadServerTable (См. Разд. 3.8.1>).


5.3.6. Команда MarkForIndex

По умолчанию, DataparkSearch помечает все URL, отбираемые к индексированию, как ожидающие индексирования через 4 часа. Это позволяет избежать возможного одновременного индексирования одно и того же URL двумя параллельно запущеными копиями indexer. Однако для больших поисковых баз эта операция пометки может занять некоторое время. Вы можете выключить такую пометку используя команду "MarkForIndex no" в вашем файле конфигурации indexer.conf.


5.3.7. Команда CheckInsertSQL

По умолчанию, DataparkSearch пытается добавлять данные в SQL-базу вне зависимости, есть она уже там или нет. На некоторых системах, это может вызывать дополнительную обработку сообщений об ошибках. Чтобы избежать появления таких ошибок, вы можете добавить команду CheckInsertSQL yes в ваш файл конфигурации indexer.conf.


5.3.8. Производительность MySQL

Пользователи MySQL могут задать опцию DELAY_KEY_WRITE=1 для таблиц DataparkSearch. Это позволит быстрее обновлять индексы, т.к.они не будут записываться на диск пока файл не будет закрыт. DELAY_KEY_WRITE целиком исключает обновление индексов на диске.

С этой опцией индексы хранятся только в памяти и записываются на диск в последнюю очередь, по команду FLUSH TABLES или по завершению mysqld. Запись обновлённых индексов на диск может занимать минуты и нетерпеливые пользователи могут прибить сервер командой kill -9 и этим разрушить индексные файлы. Другим неудобством является необходимость запуска myisamchk для этих таблиц перед стартом mysqld для проверки, на случай, если mysqld был убит до этого.

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


5.3.9. Библиотека асинхронного резолвера

Использование c-ares, библиотеки асинхронного резолвера (dns/c-ares в коллекции портов FreeBSD), позволяет для каждой индексирующей нити выполнять запросы к DNS без блокировки. Пожалуйста учтите, это также повышает число одновременных запросов к вашему DNS серверу.


5.4. Поддержка SearchD

searchd предназначен для ускорения поиска, особенно при использовании ispell-данных, синонимов и стоп-слов.


5.4.1. Для чего использовать searchd

  • Для быстрого поиска, особенно если используется нечёткий поиск на основе ispell или синонимов, а также сегментеры для азиатских языков. Необходимые файлы загружаются в память однажды при запуске searchd, в то время как search.cgi без использования searchd загружает эти данные для каждого запроса.

    Таже searchd может загружать предварительно в память некоторые данные об URL (по 20 байт на каждую проиндекированую страницу) и лимиты cache mode (4 или 8 байт на каждый URL в зависимости от типа лимита).

  • Для возможности разнесения поискового и веб-серверов на разные машины.


5.4.2. Запуск searchd

Для запуска searchd проделайте следующее:

  • Скопируйте $PREFIX/etc/searchd.conf-dist в searchd.conf.

  • Отредактируйте searchd.conf.

  • Если ускорения поиска вы хотите для загрузить в память и информацию об url (примерно по 20 байт на url), добавьте в searchd.conf следующую команду:

    PreloadURLData yes

  • Вы также можете загрузить в память индексы для наиболее часто исползуемых значений лимитов режима хранения cache используя команду PreloadLimit в файде searchd.conf:

    PreloadLimit <limit type> <limit value>

    Например:

    PreloadLimit tag Unix

  • Добавьте следующую команду в search.htm:

    DBAddr searchd://hostname/ или DBAddr searchd://hostname:port/, например:

    DBAddr searchd://localhost/

    Значение по умолчанию для port равно 7003

  • Вы можете запустить несколько чилдов searchd, отвечающих на поисковые заапросы параллельно. Используете команду MaxClients для задания этого числа. Значение по умолчанию: 1.

    MaxClients 2
  • Запустите searchd:

    /usr/local/dpsearch/sbin/searchd &

Чтобы обойтись без вывода на stderr, используйте ключ -l. Вывод сообщений в этом слуае будет происходить только через syslog (если поддержка syslog не была выключена при инсталяции при помощи ключа --disable-syslog). В случае, если поддержка syslog выключена, можно перенаправить stderr в файл:

/usr/local/dpsearch/sbin/searchd 2>/var/log/searchd.log &

Для searchd, так же как и для indexer можно указывать имя файла конфигурации в качестве параметра, например, относительно поддиректории /etc корневой директории установки DataparkSearch:

searchd searchd1.conf

или указав абсолютный путь:

searchd /usr/local/dpsearch/etc/searchd1.conf


5.5. Oracle notes

5.5.1. Introduction

By Anton Zemlyanov


5.5.1.1. Why Oracle?

Oracle is a powerful, tunable, scalable and reliable industrial RDBMS. It provides some functionalities which are absent in simple freeware RDBMS like MySQL and PostgresSQL, such as: transactions support, concurrency and consistency, data integrity, partitioning, replication, cost-based and rule-based optimizers, parallel execution, redo logs, RAW devices and many other features. Although Oracle is a very functional database, the additional qualities like reliability impose some overhead. In fact, providing many advantages Oracle has some disadvantages. For example great tenability requires more experienced DBA, redo logs support provide great reliability against instance and media failures but requires more efficient disk system. I think you should select Oracle as a database for DataparkSearch if you want to search through hundreds of megabytes or several gigabytes of information, reliability is one of the primary concerns, need high availability of the database, and you are ready to pay higher sums for hardware and Oracle DBA to achieve better quality of service.


5.5.1.2. DataparkSearch+Oracle8 Installation Requirements

In order to install DataparkSearch with Oracle RDBMS support you must ensure the following requirements:

  • Oracle8 Server must be properly installed on any computer accessible from the site where DataparkSearch are to be installed. See the documentation provided with your Oracle server.

  • Oracle client software and libraries must be installed on the site where you plan to install DataparkSearch. I strongly recommend to install utilities also, it help you to test the client and server accessibility.

  • glibc 2.0 or glibc 2.1. Oracle 8.0.5.X libraries are built for glibc 2.0.


5.5.1.3. Currently supported/tested platforms

Oracle versions:

  • Oracle 8.0.5.X

Operation systems:

  • Linux RedHat 6.1 (2.2.X + glibc 2.0)

Oracle Server may be ran on any platform supporting tcp/ip connections. I see no difficulties to port DataparkSearch Oracle driver to any commercial and freeware unix systems, any contribution is appreciated.


5.5.2. Compilation, Installation and Configuration

5.5.2.1. Compilation

Oracle 8.0.5.X and Linux RedHat 6.1

./Configure --with-oracle8=oracle_home_dir
make
make install

If you have any troubles, try to put CC = i386-glibc20-linux-gcc in the src/Makefile, this is old version of gcc compiler for glibc 2.0.


5.5.2.2. Installation and Configuration

Check whether Oracle Server and Oracle Client work properly.

First, try DataparkSearch service is accessible


 [oracle@ant oracle]$ tnsping DataparkSearch 3

TNS Ping Utility for Linux: Version 8.0.5.0.0 - Production on 29-FEB-00 09:46:12
(c) Copyright 1997 Oracle Corporation.  All rights reserved.

Attempting to contact (ADDRESS=(PROTOCOL=TCP)(Host=ant.gpovz.ru)(Port=1521))
OK (10 msec)
OK (0 msec)
OK (10 msec)

Second, try to connect to Oracle Server with svrmgrl and check whether DataparkSearch tables were created

[oracle@ant oracle]$ svrmgrl command='connect scott/tiger@DataparkSearch'

Oracle Server Manager Release 3.0.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8 Release 8.0.5.1.0 - Production
PL/SQL Release 8.0.5.1.0 - Production

Connected.
SVRMGR> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------
DICT
DICT10
DICT11
DICT12
DICT16
DICT2
DICT3
DICT32
DICT4
DICT5
DICT6
DICT7
DICT8
DICT9
PERFTEST
ROBOTS
STOPWORD
TAB1
URL
19 rows selected.

Check the library paths in /etc/ld.so.conf

[oracle@ant oracle]$ cat /etc/ld.so.conf
/usr/X11R6/lib
/usr/lib
/usr/i486-linux-libc5/lib
/usr/lib/qt-2.0.1/lib
/usr/lib/qt-1.44/lib
/oracle8/app/oracle/product/8.0.5/lib

This file should contain line oracle_home_path/lib to ensure DataparkSearch will be able to open libclntsh.so, the shared Oracle Client library

Make symbolic link:

ln -s /oracle8/app/oracle/product/8.0.5/network/admin/tnsnames.ora /etc

Correct the indexer.conf file

You should specify DBName, DBUser, DBPass in order that DataparkSearch can connect to Oracle Server. DBName is the service name, it should have the same name that was written to tnsnames.ora file, DBUSer and DBPass are Oracle user and his password correspondingly. You can run indexer now.

Setting up search.cgi

Copy the file /usr/local/dataparksearch/bin/search.cgi to apache_root/cgi-bin/search.cgi. Then add two lines to apache's http.conf file:

SetEnv ORACLE_HOME /oracle8/app/oracle/product/8.0.5
PassEnv ORACLE_HOME

Correct the search.htm to provide DBName, DBUser, DBPass information. search.cgi should work now.


Глава 6. Подсекции

6.1. Тэги

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

Для присвоения тэга серверу, или части сервера, вы должны использовать команду Tag в indexer.conf, указав её перед соответсвующей командой Server/Realm/Subnet. При поиске, вы можете указать тэг задав CGI-параметр t=xxx, в HTML форме. Смотрите indexer.conf-dist и search.htm-dist в качестве примера.


6.1.1. Команда Tag

Tag <string>

Используйте эту команду по своему усмотрению чтобы сгруппировать несколько сайтов, помечая их указаным тэгом. При индексировании или поиске, вы можете ограничиваться сайтами только указаного тэга. Можно указывать несколько команд Tag. Команда Tag имеет значение до следующей команды Tag или до конца файла конфигурации. Значение по умолчанию: пустая строка.


6.1.2. Команда TagIf

TagIf <tag> [Match|NoMatch] [NoCase|Case] [String|Regex] [loose] <section> <arg> [<arg> ... ]

Присвоить документу тэг <tag>, если значении секции section подпадает под указаный шаблон arg. Значение первых трёх необязательных параметров такое же как для команды Allow (см. Разд. 3.10.14>). Необязательный параметр loose используется для задания более низкого приоритета такому присвоению тэга, т.е. если тэг уже был присвоен на основании параметров сервера, новое значение тэгу присвоено не будет.

Пример

TagIf Docs regex Title Manual

В тэге <tag> можно использовать мета-переменные шаблона страницы выдачи (например, $(title), $(Last-Modified)). В примере ниже для каждого документа в качестве тэга выставляется доменное имя из его URL:

TagIf $(url.host) match url.host *


6.1.3. Тэги в SQL версии

Начиная с версии 3.1.x. тип тэгов изменён с INT на CHAR. Тип CHAR даёт несколько полезных возможностей. Вы може использовать SQL-шаблоны '_' and '%' при указании параметра тэга для поиска. Это позволяет тэгам, наравне с категориями, поддерживать возможность вложенности. Например, документы со значением тэга "AB" могут быть найдены, если при поиске указаны параметры тэга "A%" или "AB".

Тэги также дают возможность URL быть членом нескольких групп. Задавая SQL-шаблоны, вы можете легко создать две и более групп.

Например, тэг "ABCDE" - подпадает под выборку с такими тэгами в качестве параметра:

_BCDE
A_CDE
AB_DE
ABC_E
ABCD_

Замечание: Если у вас достаточно большая база, и ограничения по тэгу используются часто, весьма полезно создать для таблицы "server" индекс по полю "tag". Этот индекс не создаётся по умолчанию.

CREATE INDEX srv_tag ON "server" ("tag");

По умолчанию, длина поля "tag" в таблице "server" ограничена 16 символами. Если вам необходимы более длинные тэги, увеличьте это значение перед созданием базы.

Замечание: Для способа хранения cache вам нужно указать секцию tag в вашем файле sections.conf с ненулевой максимальной длиной:

Section tag 0 64


6.2. Категории

Существует редактор категорий, написаный на perl. Вы можете взять его в директории perl/cat_ed/.

Категории похожи на тэги, но обладают свойством вложенности. Т.е. вы можете иметь некоторую категорию внутри другой категории.

Основные моменты:

  • Поддерживается до 6 уровней вложенности;

  • Каждому уровню соответсвует 2 шестнадцати- или 36-ричные цифры;

  • параметром категории является path, который может быть пустым (что обозначает корневую категорию) или иметь длину до 10 символов (для остальных категорий, вложенных отностительно корневой).

Также можно установить ссылку, т.е категорию, ссылающуюся на другую категорию. Для этого предназначено поле link в базе данных. В ссылке последние два символа должны быть @@. В примере выше Moto->BMW - ссылка на Auto->BMW.

Категории могут разделяться на подкатегории произвольным образом, но для того, чтобы с ними можно было работать редактором категорий, необходимо использовать по два символа на каждый уровень. Если вы используете редактор категорий, вы можете выбрать для использования 16-ричные цифры 0-F или 36-ричные 0-Z. Поэтому категория верхнего уровня 'Auto' будет обозначена 01. Если она будет иметь подкатегорию 'Ford', то мы получим 01 для верхней категории и 01 мы присвоим для 'Ford', сложим вместе и получим 0101. Если 'Auto' имеет еще одну подкатегорию, например, 'VW', её мы обозначили бы 02, т.к. 01 уже присвоено подкатегории 'Ford', т.е. в результате получим 0102. Если 'VW' имеет подкатегорию 'Engine', опять начнем с кода 01, а в результате получим 010201: 01 - 'Auto', 02 - 'VW', 01 - 'Engine'

Если вы хотите искать только среди сайтов этой категории, неободимо передать эту категорию в качестве параметра cat=010201 в URL...т.е. создайте раскладушку такого типа:

<OPTION value="01">AUTO
<OPTION value="0101">Ford

и т.д....

Замечание: Для способа хранения cache вам нужно указать секцию category в вашем файле sections.conf с ненулевой максимальной длиной:

Section category 0 32 single


6.2.1. Команда Category

Category <string>

Вы можете помечать документы при помощи вложеный категорий. Категория - строка шестнадцатиричных цмфр. Вы можете иметь до 6 уровней вложенности по 256 элементов на каждом уровне. Пустая категоря означает корень дерева категорий. См. Разд. 6.2> для дальнейшего описания.

# This command means a category on first level:
Category AA
# This command meand a category on 5th level:
Category FFAABBCCDD


6.2.2. Команда CategoryIf

CategoryIf <category> [Match|NoMatch] [NoCase|Case] [String|Regex] [loose] <section> <arg> [<arg> ... ]

Присвоить документу категорию <category>, если значение секции section подпадает под указаный шаблон arg. Значение первых трёх необязательных параметров такое же как для команды Allow (см. Разд. 3.10.14>). Необязательный параметр loose используется для задания более низкого приоритета такому присвоению категории, т.е. если категория уже была присвоена на основании параметров сервера, новое значение категории присвоено не будет.

Пример

CategoryIf 010F regex Title "JOB ID"


6.2.3. Загрузка таблицы категорий

Когда задана команда

CategoryTable mysql://user:pass@host/dbname/tablename[?charset=CHARSET]
indexer будет загружать информацию о категориях из указаной SQL-таблицы tablename. См. структуру этой таблицы в файле create/mysql/create.txt. Если для вашей базы данных нет соответсвующего скрипта со структурой этой таблицы, возьмите этот файл в качестве образца.

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


6.2.4. Команда FlushCategoryTable

Эта команда очищает содержимое таблицы categories. Используйте эту команду для удалений устаревших данных перед загрузкой новых при помощи команды CategoryTable.


Глава 7. Поддержка языков

7.1. Кодировки


7.1.1. Поддерживаемые кодировки

DataparkSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5, gbk и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode UTF-8. Это позволяет индексировать документы на более чем 650-ти языках мира, предусмотренных в Unicode.

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

Таблица 7-1. Кодировки и их языковые группы

>ГруппаКодировки
Arabiccp864, ISO-8859-6, MacArabic, windows-1256
Armenianarmscii-8
Balticcp775, ISO-8859-13, ISO-8859-4, windows-1257
CelticISO-8859-14
Central Europeancp852, ISO-8859-16, ISO-8859-2, MacCE, MacCroatian, MacRomania, windows-1250
Chinese SimplifiedGB2312, GBK
Chinese TraditionalBig5, Big5-HKSCS, cp950, GB-18030
Cyrilliccp855, cp866, cp866u, ISO-8859-5, KOI-7, KOI8-C, KOI8-R, KOI8-U, MacCyrillic, windows-1251
Georgiangeorgian-academy, georgian-ps, geostd8
Greekcp869, cp875, ISO-8859-7, MacGreek, windows-1253
Hebrewcp862, ISO-8859-8, MacHebrew, windows-1255
Icelandiccp861, MacIceland
IndianMacGujarati, tscii
IranianISIRI3342
JapaneseEUC-JP, ISO-2022-JP, Shift_JIS
KoreanEUC-KR
Laocp1133
Nordiccp865, ISO-8859-10
South EurISO-8859-3
TajikKOI8-T
Thaicp874, ISO-8859-11, MacThai
Turkishcp1026, cp857, ISO-8859-9, MacTurkish, windows-1254
Unicodesys-int, UTF-16BE, UTF-16LE, UTF-8
VietnameseVISCII, windows-1258
Westerncp437, cp500, cp850, cp860, cp863, IBM037, ISO-8859-1, ISO-8859-15, MacRoman, US-ASCII, windows-1252


7.1.2. Разные названия кодировок

Каждая кодировка имеет модет иметь несколько различных вариантов названия. Например, iso-8859-2, iso8859-2, latin2 - названия одной и той же кодировки. DataparkSearch понимает следующие варианты названий кодировок:

Таблица 7-2. Синонимы наименований кодировок

armscii-8armscii-8, armscii8
Big5big-5, big-five, big5, bigfive, cn-big5, csbig5
Big5-HKSCSbig5-hkscs, big5_hkscs, big5hk, hkscs
cp10261026, cp-1026, cp1026, ibm1026
cp11331133, cp-1133, cp1133, ibm1133
cp437437, cp437, ibm437
cp500500, cp500, ibm500
cp775775, cp775, ibm775
cp850850, cp850, cspc850multilingual, ibm850
cp852852, cp852, ibm852
cp855855, cp855, ibm855
cp857857, cp857, ibm857
cp860860, cp860, ibm860
cp861861, cp861, ibm861
cp862862, cp862, ibm862
cp863863, cp863, ibm863
cp864864, cp864, ibm864
cp865865, cp865, ibm865
cp866866, cp866, csibm866, ibm866
cp866u866u, cp866u
cp869869, cp869, csibm869, ibm869
cp874874, cp874, cs874, ibm874, windows-874
cp875875, cp875, ibm875, windows-875
cp950950, cp950, windows-950
EUC-JPcseucjp, euc-jp, euc_jp, eucjp, ujis, x-euc-jp
EUC-KRcseuckr, euc-kr, euc_kr, euckr
GB-18030gb-18030, gb18030
GB2312chinese, cn-gb, csgb2312, csiso58gb231280, euc-cn, euc_cn, euccn, gb2312, gb_2312-80, iso-ir-58
GBKcp936, gbk, windows-936
georgian-academygeorgian-academy
georgian-psgeorgian-ps
geostd8geo8-gov, geostd8
IBM037037, cp037, csibm037, ibm037
ISIRI3342isiri-3342, isiri3342
ISO-2022-JPcsiso2022jp, iso 2022-jp, iso-2022-jp
ISO-8859-1cp819, csisolatin1, ibm819, iso 8859-1, iso-8859-1, iso-ir-100, iso8859-1, iso_8859-1, iso_8859-1:1987, l1, latin-1, latin1
ISO-8859-10csisolatin6, iso 8859-10, iso-8859-10, iso-ir-157, iso8859-10, iso_8859-10, iso_8859-10:1992, l6, latin-6, latin6
ISO-8859-11iso 8859-11, iso-8859-11, iso8859-11, iso_8859-11, iso_8859-11:1992, tactis, thai, tis-620, tis620
ISO-8859-13iso 8859-13, iso-8859-13, iso-ir-179, iso8859-13, iso_8859-13, l7, latin-7, latin7
ISO-8859-14iso 8859-14, iso-8859-14, iso-ir-199, iso8859-14, iso_8859-14, iso_8859-14:1998, l8, latin-8, latin8
ISO-8859-15iso 8859-15, iso-8859-15, iso-ir-203, iso8859-15, iso_8859-15, iso_8859-15:1998, l9, latin-0, latin-9, latin0, latin9
ISO-8859-16iso 8859-16, iso-8859-16, iso-ir-226, iso8859-16, iso_8859-16, iso_8859-16:2000
ISO-8859-2csisolatin2, iso 8859-2, iso-8859-2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, l2, latin-2, latin2
ISO-8859-3csisolatin3, iso 8859-3, iso-8859-3, iso-ir-109, iso8859-3, iso_8859-3, iso_8859-3:1988, l3, latin-3, latin3
ISO-8859-4csisolatin4, iso 8859-4, iso-8859-4, iso-ir-110, iso8859-4, iso_8859-4, iso_8859-4:1988, l4, latin-4, latin4
ISO-8859-5csisolatincyrillic, cyrillic, iso 8859-5, iso-8859-5, iso-ir-144, iso8859-5, iso_8859-5, iso_8859-5:1988
ISO-8859-6arabic, asmo-708, csisolatinarabic, ecma-114, iso 8859-6, iso-8859-6, iso-ir-127, iso8859-6, iso_8859-6, iso_8859-6:1987
ISO-8859-7csisolatingreek, ecma-118, elot_928, greek, greek8, iso 8859-7, iso-8859-7, iso-ir-126, iso8859-7, iso_8859-7, iso_8859-7:1987
ISO-8859-8csisolatinhebrew, hebrew, iso 8859-8, iso-8859-8, iso-ir-138, iso8859-8, iso_8859-8, iso_8859-8:1988
ISO-8859-9csisolatin5, iso 8859-9, iso-8859-9, iso-ir-148, iso8859-9, iso_8859-9, iso_8859-9:1989, l5, latin-5, latin5
KOI-7iso-ir-37, koi-7, koi7
KOI8-Ccskoi8c, koi8-c, koi8c
KOI8-Rcskoi8r, koi8-r, koi8r
KOI8-Tcskoi8t, koi8-t, koi8t
KOI8-Ucskoi8u, koi8-u, koi8u
MacArabicmacarabic
MacCEcmac, macce, maccentraleurope, x-mac-ce
MacCroatianmaccroation
MacCyrillicmaccyrillic, x-mac-cyrillic
MacGreekmacgreek
MacGujaratimacgujarati
MacHebrewmachebrew
MacIcelandmacisland
MacRomancsmacintosh, mac, macintosh, macroman
MacRomaniamacromania
MacThaimacthai
MacTurkishmacturkish
Shift_JIScsshiftjis, ms_kanji, s-jis, shift-jis, shift_jis, sjis, x-sjis
sys-intsys-int
tsciitscii
US-ASCIIansi_x3.4-1968, ascii, cp367, csascii, ibm367, iso-ir-6, iso646-us, iso_646.irv:1991, us, us-ascii
UTF-16BEutf-16, utf-16be, utf16, utf16be
UTF-16LEutf-16le, utf16le
UTF-8utf-8, utf8
VISCIIcsviscii, viscii, viscii1.1-1
windows-1250cp-1250, cp1250, ms-ee, windows-1250
windows-1251cp-1251, cp1251, ms-cyr, ms-cyrl, win-1251, win1251, windows-1251
windows-1252cp-1252, cp1252, ms-ansi, windows-1252
windows-1253cp-1253, cp1253, ms-greek, windows-1253
windows-1254cp-1254, cp1254, ms-turk, windows-1254
windows-1255cp-1255, cp1255, ms-hebr, windows-1255
windows-1256cp-1256, cp1256, ms-arab, windows-1256
windows-1257cp-1257, cp1257, winbaltrim, windows-1257
windows-1258cp-1258, cp1258, windows-1258


7.1.3. Перекодировка во время индексации

indexer перекодирует все документы в кодировку, указанную в команде LocalCharset в файле indexer.conf. Внутри программы перекодировка реализована посредством промежуточного представления в виде Unicode. Особенность DataparkSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, DataparkSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, DataparkSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор LocalCharset влияет на размер базы данных.


7.1.4. Выбор LocalCharset

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

Если командой LocalCharset указана кодировка UTF-8, то это позволит сохранять любые символы, поддерживаемым в Unicode без необходимости представлять их в HTML-формате. Однако, следует иметь в виду, что это заведомо приводит к использованию до двух-трех байт на каждую не-латинскую букву. Например, на каждую букву кириллицы требуется два байта для сохранения ее в UTF-8.

Поскольку все кодировки включают в себя латинские буквы, то любая кодировка предоставляет поддержку по-крайней мере двух языков - английского и еще какого-то одного (или более) языка (единственное исключение - US-ASCII, поддерживающий только латинские буквы). Это означает, что при использовании DataparkSearch с LocalCharset, отличным от UTF-8, одновременная индексация документов с языками из одной группы не приводит к необходимости использовать HTML-формат, а значит не приводит к увеличению необходимого дискового пространства.

Например, если Ваша поисковая машина настроена использовать LocalCharset из 5-й группы (Кирилица), то документы на болгарском, белорусском, македонском, русском, сербском, украинском, а так же на английском языках будут сохранены компактно, с использованием одного байта на одну букву. Индексирование документов в других кодировках не из 5-й группы (включая UTF-8) также возможно; однако indexer будет использовать HTML-формат для сохранения букв, отличных от кирилических и английских. Сохранение, например, греческой буквы в кириллической кодировке требует применение семь байт на одну букву.

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


7.1.5. Определение кодировки документа

indexer определяет кодировку в документа в следующем порядке:

  1. "Content-type: text/html; charset=xxx"

  2. <META NAME="Content-Type" CONTENT="text/html; charset=xxx">

    Выбор этого варианта можно выключить указав команду GuesserUseMeta no в файле конфигурации indexer.conf.

  3. При выключенном автораспозновании: кодировка по-умолчанию, указанная командой "Charset"

    При включенном автораспознавании: результат работы автоматического распознавания кодировки.


7.1.6. Автоматическое распознавание кодировки

DataparkSearch имеет механизм автоматического распознавания кодировки и языка документа. В настоящее время распознается около 100 различных комбинаций кодировки и языка. Распознавание реализовано с использованием так называемой "N-Gram-Based Text Categorization" технологии. В комплекте программы поставляются файлы с так называемыми "картами языков", один файл на каждую пару кодировка-язык. По-умолчанию они устанавливаются в /usr/local/dpsearch/etc/langmap/. Чтобы увидеть полный список распознаваемых в настоящий момент языков и кодировок, взгляните в этот каталог. Распознавание работает хорошо на текстах в 500 байт и длиннее. Более короткие тексты могут распознаваться хуже. Для активизации автоматического распознавания кодировки необходимо загрузить языковые карты, используя команды LangMap.


7.1.6.1. Команда LangMapFile

Загружает из указанного файла карту языка и кодировки для автоматического их определения. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд LangMapFile.

LangMapFile langmap/en.ascii.lm


7.1.6.2. Создание собственных карт языков

Для создания собственных карт языков служит утилита dpguesser. Кроме этой утилиты вам также потребуется файл-образец текстов на данном языке в нужной кодировке. Для создания своей карты языка используйте следующий формат команды:

        dpguesser -p -c charset -l language < FILENAME > language.charset.lm

Утилиту dpguesser можно также использовать для определения языка и кодировки файла на основании уже созданных карт языков. Для этого используйте следующий формат команды:

        dpguesser [-n maxhits] < FILENAME

Для некоторых языков существует несколько используемых кодировок. Для преобразования текстов из одной, поддерживаемой DataparkSearch кодировки, в другую предназначена утилита dpconv.

        dpconv [OPTIONS] -f charset_from -t charset_to [configfile] < infile > outfile

По умолчанию, утилиты dpguesser и dpconv устанавливаются в директорию /usr/local/dpsearch/sbin/.

Поддерживается автоматическое обновление карт языков и кодировок, если удалённый сервер возвращает чётко указаные язык и кодировку. Для включения этой возможности необходимо в файле indexer.conf указать команду

LangMapUpdate yes

По умолчанию, DataparkSearch использует только первые 512 байт каждого индексируемого файла для определения языка и кодировки. Вы можете изменить это значение при помощи команды GuesserBytes. Используйте значение 0 для учёта всего такста индексируемого документа.

GuesserBytes 16384


7.1.7. Кодировка документов по-умолчанию

Используйте команду RemoteCharset в indexer.conf чтобы установить кодировку документов по-умолчанию.

Если индексируемый сервер не выдает кодировку документа ни в заголовке Content-Type, ни в META-тэге, и при этом автоматическое распознаывание либо отключено, либо не дало хорошего результата (т.е. язык и кодировка документа "не похожи" на представленные в загруженных картах), то в качестве кодировки документа будет использована кодировка, указанная в команде RemoteCharset. Если же кодировка по-умолчанию не указана, то будет использована iso-8859-1 (latin1).


7.1.8. Язык документов по-умолчанию

Вы можете установить язык документов по-умолчанию с помощью команды DefaultLang в файле indexer.conf. Это может пригодиться, например, во время поиска для ограничения поиска только по документам на указанном языке.

DefaultLang <string>

Задаёт язык документов по умолчанию.

DefaultLang en

7.1.9. Перекодировка во время поиска

Чтобы указать кодировку, в которой будут оторбражаться результаты поиска, используйте команду BrowserCharset в search.htm. BrowserCharset может отличаться от LocalCharset. Поисковая программа произведет перекодировку автоматически.


7.1.10. Команда LocalCharset

Задаёт кодировку, которая будет использоваться для хранения информации в базе данных. Данные во всех других кодировках будут перекодированы в эту кодировку. См. Разд. 7.1> для подробного описания как выбрать LocalCharset для языков, используемых на вашем сайте или сайтах, а также списка поддерживаемых кодировок. Эта команда должны быть задана один раз и имеет глобальный эффект для всего файла конфигрурации. Значение по умолчанию: iso-8859-1 (latin1).

LocalCharset koi8-r


7.1.11. Команда RemoteCharset

RemoteCharset <charset>

<сharset> - кодовая страница по умолчанию для последующих команд Server, Realm или Subnet. Используется при индексировании "плохих" серверов, не предоставляющих информации о кодировке в заголовках ответа сервера или в <META NAME="Content" Content="text/html; charset="some_charset"> на страницах. Команда действует до конца файла, или до следующей команды RemoteCharset. Значение по умолчанию: iso-8859-1 (latin1).

RemoteCharset iso-8859-5


7.1.12. Команда URLCharset

URLCharset <charset>

<charset> - кодовая страница для аргументов последующих команд Server, Realm или URL. Эта команда задаёт кодовубю страницу только для аргументов последующих команду и не влияет на определение кодировки индексируемых страниц. Имеет меньший приоритет, нежели команда RemoteCharset. Может задаваться перед каждой командой Server, Realm или URL и действует до конца файла конфигурации или до следующей команды URLCharset. Значение по умолчанию: ISO-8859-1 (latin1).

URLCharset KOI8-R


7.1.13. Команда CharsToEscape

CharsToEscape "\"&<>![]"

Используйте эту команду в вашем поисковом шаблоне для указания списка эскейп-символов для мета-переменных поискового шаблона типа $&(x).


7.2. Создание многоязычных страниц поиска

Основная идея Craig Small . Небольшие изменения Alex Barkov .

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

Пожалуйста, устите, что замечания по конфигурированию, даваемы ниже, абсолютно одинаковы для обоих поисковых фронт-ендов search.php и search.cgi.

Замечание: специфика PHP: единственное отличие для search.php заключается в модификации config.inc для изменения файла шаблона:

$template_file= ereg_replace(".php", ".htm", basename(getenv("SCRIPT_FILENAME")));
$template_file = "/etc/somewhere" . $template_file;

Дальнейшая установка проводится в три этапа.

  1. Установка нескольких шаблонов.

    Основная идея состоит в том, чтобы иметь один файл search.php или search.cgi и несколько файлов search.[language].htm. Также, для ипользования по умолчанию необходимо иметь файл search.htm (обычно в качестве символьной ссылки на search.en.htm).

    Если имя скрипта search.en.php (или search.en.cgi), оба CGI и PHP фронт-енды будут искать /somewhere/etc/search.en.htm, мы подразумеваем, чтоassuming /somewhere/etc/ - поддиректория /etc/ корневой директории установки DataparkSearch.

    Вы должны поместить в /somewhere/etc/ все такие шаблоны search.htm, т.е. /somewhere/etc будет иметь, например:

    search.en.htm Шаблон для английского языка
    search.pl.htm Шаблон для польского языка
    search.ru.htm Шаблон для русского языка
    search.htm Символьная ссылка на шаблон английского языка

  2. Установка фронт-ендов

    Создайте поддиректорию и поместите в неё search.cgi или search.php (отдельно от включаемых файлов, если желаете, указав для PHP include_path и разместив их в другом месте).

    Затем создайте символьные ссылки:

    search.cgi Оригинальный файл
    search.en.cgi символьная ссылка
    search.pl.cgi символьная ссылка
    search.ru.cgi символьная ссылка

    Или для PHP фронт-енда:

    search.php Оригинальный файл
    search.en.php символьная ссылка
    search.pl.php символьная ссылка
    search.ru.php символьная ссылка

  3. Конфигурирование Apache

    Теперь нужно научить apache понимать, что надо здесь делать. Вам нужно включить процесс определения содержимого (negotiation) и изменить индексы. Я использовал файл .htaccess, но вы можете задать это и в файле конфигурации apache.

    AddLanguage en .en
    AddLanguage pl .pl
    AddLanguage ru .ru
    
    DirectoryIndex search search.cgi  (or search.php)
    Options FollowSymlinks MultiViews


7.2.1. Как это работает ?

  1. Вы набираете url http://myhost/mydir/search без слэша на конце !!

  2. Ваш броузер говорит "Я предпочитаю английский язык (т.е. определён язык en) "

  3. Apache находит search.en.cgi (DirectoryIndex даёт search, MultiViews даёт en.cgi)

  4. SCRIPT_FILENAME, используемый обоими search.cgi и search.php равен somepath/search.en.cgi

    Замечание: Большинство других переменных будут иметь неправильные значения, либо search, либо search.cgi)

  5. Вы измезменяете config.inc как указано выше, для использования search.en.htm.

Что случится, если пользователь, к примеру, захочет немецкий ? У нас нет search.de.cgi (search.de.php), т.е. первый элемент в списке DirectoryIndex не отработает, тогда сервер попробует второй, search.php Да, он получит страницу на английском, но это лучше, чем 404.

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


7.2.2. Возможные сложности

У вас могут возникнуть некоторые проблемы с определением языка, вызванные:

  • Некотрыми кэшами, неследующими стандартам

  • Некоторыми броузерами, неследующими стандартам

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

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


7.3. Сегментеры фраз японского, тайского, корейского и китайского языков

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

Иногда для красоты, текст на китайском, японском, корейском или тайском языке набирается с пробелом между каждым иероглифом. В этом случае для индексирования таких текстов, вы можете использовать команды "ResegmentChinese yes", "ResegmentJapanese yes", "ResegmentKorean yes" or "ResegmentThai yes". При включенном ресегментировании все пробелы между символами в тексте убираются, а затем весь текст целиком обрабатывается сегментерами DataparkSearch (см. ниже).


7.3.1. Сегментер фраз японского языка

Для разбиения на слова фраз японского языка используется система морфологического анализа японского языка ChaSen или морфологический анализатор японского языка MeCab. Поэтому её необходимо установить одну из этих систем до начала сборки и установки DataparkSearch.

Для включения поддержки разбиения фраз японского языка, вам необходимо указать для configure ключ --enable-chasen или --enable-mecab.


7.3.2. Сегментер фраз китайского языка

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

Для включения поддержки сегментера фраз на китайском языке, необходимо при сборке DataparkSearch включить поддержку кодировки GB2312, если будет использоваться словарь упрощенного китайского mandarin.freq, или кодировки Big5, если будет использоваться словарь традиционного китайского TraditionalChinese.freq, а также указать в indexer.conf при помощи команды LoadChineseList частотный словарь слов китайского языка для загрузки.

LoadChineseList [charset dictionaryfilename]

По умолчанию используется кодировка GB2312 и словарь mandarin.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadChineseList

Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.


7.3.3. Сегментер фраз тайского языка

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

Для включения поддержки сегментера фраз на тайском языке, необходимо указать в indexer.conf при помощи команды LoadThaiList частотный словарь слов тайского языка для загрузки.

LoadThaiList [charset dictionaryfilename]

По умолчанию используется кодировка tis-620 и словарь thai.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadThaiList

Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.


7.3.4. Сегментер фраз корейского языка

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

Для включения поддержки сегментера фраз на корейском языке, необходимо указать в indexer.conf при помощи команды LoadKoreanList частотный словарь слов корейского языка для загрузки.

LoadKoreanList [charset dictionaryfilename]

По умолчанию используется кодировка euc-kr и словарь korean.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadKoreanList

Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.


7.4. Поддержка мультиязычных веб серверов

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

Для индексирования всех страниц таких серверов предназначена клманда VaryLang, задающая список языков, разделённых пробелами, которые будут запрашиваться при индексировании каждого URL, имеющего несколько языковых вариантов.

Пример использования:

 
VaryLang "ru en fr"

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


Глава 8. Поиск документов

8.1. Использование поисковых фронт-эндов

8.1.1. Осуществление поиска

Откройте предпочитаймый вами фронт-энд в окне броузера:

http://your.web.server/path/to/search.cgi

Чтобы найти что-то, просто наберите слова, которые хотите найти и нажмите кнопку ОТОСЛАТЬ. Например: mysql odbc. DataparkSearch найдет все документы, содержащие слово mysql и/или слово odbc. Лучшие документы, имеющий более высокую релевантность и популярность будут показаны первыми.

Чтобы найти фразу, просто заключите её в кавычки. Например: "uncontrollable sphere".


8.1.2. Параметры поиска

Фронт-энды DataparkSearch поддерживают следующие параметры, указываемыме в CGI-запросе. Вы можете использовать их в HTML форме на странице поиска.

Таблица 8-1. Параметры поиска

qтекстовый параметр, содержащий запрос на поиск
vqтекстовый параметр, содержащий поисковый запрос на языке Verity Query Language (префиксный вариант), см Разд. 8.1.8>. Чтобы использовать этот параметр, необходимо омтавить пустым параметр q.
sстрока символов, задающая порядок сортировки результатов поиска. Порадок сортировки задаётся слева направо. Большая буква соответсвует сортировке по убыванию, маленькая - по возрастанию. Возможные символы: R или r - сортировка по релевантности, P или p - сортировка по PopularityRank, I или i - сортировка по важности (произведению релевантности и PopularityRank), A или a - сортировка по сумме релевантности и PopularityRank, D или d - сортировка по дате последнего изменения документа. Значение по умолчанию: RP.
psчисло результатов поиска, отображаемых на одной странице, 20 по умолчанию. Максимальное значение равно 100. Это ограничение введено во избежание излишней перегрузки сервера и может быть изменено заменой значения MAX_PS в файле search.c.
npномер страницы начиная с 0, 0 по умолчанию (первая страница)
pномер страницы начиная с 1, для использования с OpenSearch
mРежим поиска. На данный момент поддерживаются значения all, any, near и bool.
wmСовпадение слова. Вы можете использовать этот параметр для указания способа совпадения слов. Зачения wrd, beg, end и sub соответственно обозначают целое слово, начало слова, окончание слова и подстрока слова.
tЛимит по тэгу. Задаёт поиск только среди документов, помеченых указаным тэгом. Этот параметр имеет то же значение, что и ключ -t у indexer.
cЛимит по категории. См. Разд. 6.2> для описания.
ulЛимит по URL, подстрока URL для ограничения поиска по части базы. Поддерживаются SQL шаблоны % и _. Этот параметр имеет тот же эффект, что и ключ -u у indexer. Если указан неабсолютный URL, search.cgi дообавит знаки % до и после значения этого параметра, если используется SQL база данных для хранения информации. Например, <OPTION VALUE="/manual/"> а не VALUE="%/manual/%". Если указан полный URL (с указанием схемы)б search.cgi добавляет знак % только после значения этого параметра. Например, для <OPTION VALUE="http://localhost/"> search.cgi передаст http://localhost/% в оператор SQL LIKE.
Не поддерживается для способа хранения cache.
wfЗначения весов. Позволяет изменить значения весов различных секций документов во аремя поиска. Значение должно представлять из себя строку шестнадцатеричных чисел. См. обяснение ниже в Разд. 8.1.3>.
g или langЛимит по языку. Стандартный двубуквенный код языка по ISO, для ограничения поиска по полю url.lang.
tmpltИмя файла шаблона (без пути). Для указания имени файла шаблона, отличного от стандартного search.htm.
typeЛимит по Content-Type. Для способа хранения cache должно быть точное соответсвие. Для SQL-режимов возможно использование шаблонов SQL.
spОграничение использования словоформ. =1, если необходим поиск по всем словоформам (включая корректировку правописания, если включена поддержка aspell) введённых слов. =0, если необходим поиск только введенных форм слов. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.
syОграничение использования синонимов. =1, если необходимо использовать синонимы введённых слов. =0, не использовать синонимы. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.
emptyИспользовать ли лимиты для вывода результатов, если не задано ни одного слова в запросе. =yes, использовать лиминты для вывода результатов, если не задано ни одного слова в запросе (по умолчанию). =no, не использовать.
dt Ограничение по времени. Поддерживается три типа.

Если dt равно back, это означает, что вы хотите ограничить результаты поиска по давности. Давность ограничивается параметром dp.

Если dt равно er, это означает, что поиск поиск будет ограничен страницами старше или новее указаной даты. Старше/новее задаётся параметром dx. Дата задаётся параметрами dm, dy, dd.

Если dt равно range, обозначает, что поиск будет ограничен двумя датами, начала и конца. Даты задаются двумя параметрами, соответственно db и de.

dpОграничение по давности, если значение dt равно back. Задаётся в формате xxxA[yyyB[zzzC]]. Пробелы допускаются между xxx и A и yyy и т.д.). xxx, yyy, zzz - суть числа (могут быть негативными!), A, B, C могут быть одним из следующего (буквы такие же как в функциях strptime/strftime): s - секунда, M - минута, h - час, d - день, m - месяц, y - год. Примеры:
  4h30M 	  - 2 часа и 30 минут
  1Y6m-15d        - 1 год и шесть месяцев минус 15 дней
  1h-60M+1s       - 1 час минус 60 минут плюс 1 секунда
dxФлаг старше/новее, если значение dt равно er. =1 - новее. =-1 - старше.
dmМесяц даты, если значение dt равно er. 0 - январь, 1 - февраль, ... 11 - декабрь.
dyГод даты, если значение dt равно er. Четыре цифры. Например, 1999 или 2001.
ddДень даты, если значение dt равно er. 1...31.
dbНачальная дата интервала, если значение dt равно range. Дата указывается как строка в формате dd/mm/yyyy, где dd - день, mm - месяц, а yyyy - четырёхцифровой год.
deКонечная дата интервала, если значение dt равно range. Дата указывается как строка в формате dd/mm/yyyy, где dd - день, mm - месяц, а yyyy - четырёхцифровой год.

8.1.3. Изменение весов различных частей документов во время поиска

Параметр wf, передаваемый в search.cgi задаёт веса для различных секций документов. См. раздел "Section" в файле indexer.conf-dist.

Для использования этой возможности необходимо иметь уникальные ID для различных секций документов, указываемых в командах Section файла конфигурации indexer.conf command. На данный момент поддерживается до 256 различных секций.

Предположим, что в indexer.conf определены следующие секции:

  Section body        1  256
  Section title       2  128
  Section keywords    3  128
  Section description 4  128

Значение wf - строка шестнадцатиричных цифр ABCD. Каждая цифра - вес соответствующей секции документа. Самая правая цифра соответсвует секции 1. Для указанной выше конфигурации секций:

      D - вес для секции 1 (body)
      C - вес для секции 2 (title)
      B - вес для секции 3 (keywords)
      A - вес для секции 4 (description)

Примеры:

   wf=0001 поиск только по секции body.

   wf=1110 поиск по секциям title,keywords,desctription, но не по секции body.

   wf=F421 поиск по:
          Description с весом 15  (F hex)
          Keywords с весом 4
          Title с весом  2
          Body с весом 1

По умолчанию, все секции имеют вес 1. Если число секций, указанных в wf, меньше числа определенных секций, то для всех оставшихся секций устанавливается вес, равный весу секции с макимальным номером из wf. Т.е.:

   wf=01 также ищет только по секции body.

Если DataparkSearch собирается с быстрым вариантом расчёта релевантности (указана опция --enable-rel=fast для configure), в этом случае только нулевое или ненулевое значение веса имеет смысл (это позволяет только включать/исключать заданные секции из результатов поиска). Чтобы использовать полную поддержку динамических весов секций, необходимо задать опцию --enable-rel=full для configure во время сборки DataparkSearch.


8.1.4. Использование фронт-энда на страницах с SSI

При сипользовании динамических shtml страниц, содержащих SSI вызов search.cgi, т.е. search.cgi не вызывается напрямую как CGI программа, необходимо отвергнуть переменную окружения SCRIPT_NAME, т.к. все ссылки на страницах поиска должны вести на динамическую страницу, а не на search.cgi.

Например, если shtml страница содержит строку <--#include virtual="search.cgi">, переменная SCRIPT_NAME будет указывать на search.cgi, а не на shtml страницу.

Для возможности отказа от использования переменной SCRIPT_NAME, мы ввели переменную DPSEARCH_SELF, которую вам необходимо добавить в конфигурацию сервера Apache httpd.confsearch.cgi сначала проверяет переменную DPSEARCH_SELF и только потом, при неудаче SCRIPT_NAME. Вот пример использования переменной окружения DPSEARCH_SELF при помощи команд конфигурирования сервера Apache SetEnv/PassEnv:

SetEnv DPSEARCH_SELF /path/to/search.cgi
PassEnv DPSEARCH_SELF


8.1.5. Использование нескольких шаблонов

Зачастую необходимо использовать несколько различных шаблонов с одним и тем же search.cgi. Существует несколько способов сделать это. Они указываются ниже в том порядке, в каком search.cgi определяет имя шаблона:

  1. search.cgi проверяет CGI параметр tmplt. Таким образом вы можете задать имя файла нужного шаблона в этом параметре.

  2. search.cgi проверяет переменную окружения DPSEARCH_TEMPLATE. Таким образом вы можете установить путь до нужного шаблона в этой переменной.

  3. search.cgi проверяет path info часть URL, доступную через переменную окружения PATH_INFO. Например, http://localhost/cgi-bin/search.cgi/search1.html в качестве шаблона использует search1.htm, а http://localhost/cgi-bin/search.cgi/search2.html использует search2.htm, и т.д.

  4. search.cgi также поддерживает внуттрений релирект Apache. Он проверяет переменных окружения REDIRECT_STATUS и REDIRECT_URL. Для использования этого способа указания шаблона, необходимо добавить следующие строчки в файл конфигурации Apache httpd.conf:

                   AddType text/html .zhtml
                   AddHandler zhtml .zhtml
                   Action zhtml /cgi-bin/search.cgi
                   

    Поместите search.cgi в вашу /cgi-bin/ директорию. Затем поместите HTML-шаблон на вашем сервере с расширением .zhtml, например, template.zhtml. Теперь вы можете открыть страницу поиска: http://www.site.com/path/to/template.zhtml Конечно, вы можете использовать любое свободное расширение вместо .zhtml.

  5. Если два предыдущих способа не помогли определить имя шаблона, search.cgi откроет шаблон с тем же именем, что и выполняемая CGI-программа, имя которой указано в переменной окружения SCRIPT_NAME. Т.е. search.cgi бужет использовать шаблон ETC/search.htm, search1.cgi будет использовать шаблон ETC/search1.htm и т.д., где ETC - /etc директория DataparkSearch (обычно это /usr/local/dpsearch/etc). Таким образом вы можете использовать без перекомпиляции тот же самый search.cgi с различными шаблонами. Просто создайте несколько линков на search.cgi с различными именами, соответствующими нужным шаблонам в директории /etc DataparkSearch.

    См. также Разд. 7.2>


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

Оператор allin<section>:, где <section> - имя любой секции, определенной в файле конфигурации sections.conf (или командами Section в indexer.conf или в search.htm/searchd.conf) и имеющей ненулевой номер секции (см. Разд. 3.10.43>), позволяет ограничить область поиска указываемого слова в поисковом запросе только заданой секцией.

От ограничения поиска по секциям при помощи CGI-параметра &wf= отличается тем, что ограничение действует только на слова поискового запроса, указываемые после данного оператора.

Например, если sections.conf содержит команды

 
Section body 1 256
Section title 2 128
Section url 3 0 strict
то в поисковом запросе можно использовать операторы allinbody:, allintitle: и allinurl:.

По запросу computer allintitle: science будут найдены документы, содержащие слово "science" в заголовке и слово "computer" в любой секции документа.


8.1.7. Булев поиск

Для задания более сложных запросов, вы можете строить булевы запросы поиска. Необходимо в поисковой форме указать режим поиска bool.

DataparkSearch понимает следющие булевы операторы:

AND или & - логическое И. Например, mysql & odbc. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc". Вы также можете использовать знак + для этого оператора.

NEAR - Оператор NEAR принимает истиное значение если оба слова находятся не далее, чем в 16 словах друг от друга. Например, mysql NEAR odbc. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc", расположеные на расстоянии не далее 16 слов друг от друга.

ANYWORD или * - Оператор ANYWORD аналогичен оператору И, но принимает истиное значение, если между обеими словами находится одно любое слово и левый операнд имеет меньшую позицию, нежели правый. Например, "mysql * odbc" - DataparkSearch найдёт все документы, содержащие оба слова "mysql" и "odbc", и меющие любое слово между ними, например, документы с фразой "mysql via odbc".

OR или | - логическое ИЛИ. Например, mysql|odbc. DataparkSearch будет искать URL, содержащие или слово "mysql" или слово "odbc".

NOT или ~ - логическое НЕ. Например, mysql & ~ odbc. DataparkSearch будет искать URL, содержащие слово "mysql" и в тоже время не содержащие слово "odbc". Обратите внимание, что ~ всего лишь исключает некоторые документы из результата поиска. Запрос "~ odbc" ничего не найдёт!

() - оператор группирования для создания более сложных запросов поиска. Например, (mysql | msql) & ~ postgres.

" - оператор выделения фраз. Например, "russian apache" & "web server". Вы также можете использовать знак ' для этого оператора.

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


8.1.8. Язык запросов Verity Query Language, VQL

DataparkSearch поддерживает только префиксный вариант Verity Query Language.

Также поддерживается только следующее подмножество операторов VQL:

Таблица 8-2. Операторы VQL, поддерживаемые DataparkSearch

<ACCRUE>эквивалентен оператору OR булевого запроса.
<AND>эквивалентен оператору AND булевого запроса.
<ANY>эквивалентен оператору OR булевого запроса.
<NEAR>эквивалентен оператору NEAR булевого запроса.
<NOT>эквивалентен оператору NOT булевого запроса.
<OR>эквивалентен оператору OR булевого запроса.
<PHRASE>эквивалентен фразе в булевом запросе.
<WORD>рассматривается как пустой оператор.

8.1.9. Как используются при поиске устаревшие документы

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


8.2. Модуль mod_dpsearch для Apache httpd

Начиная с версии 4.19 DataparkSearch также предоставляет модуль для веб-сервера Apache, реализующий возможности searchd и search.cgi.


8.2.1. Для чего использовать mod_dpsearch

  • Как и searchd (см. Разд. 5.4.1>), для ускорения поиска, mod_dpsearch может держать в памяти предварительно загруженными некоторые данные.

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

  • Сам модуль mod_dpsearch уже находится в памяти, когда приходит поисковый запрос от пользователя, в то время как search.cgi, как правило, загружается с диска для каждого запроса.


8.2.2. Конфигурирование mod_dpsearch

Чтобы включить поддержку этой возможности, добавьте к configure ключ --enable-apache-module. В добавление к основным программам, будет создана библиотека mod_dpsearch.so. Эта библиотека устанавливается в дерево установки Apache. После этого вам необходимо активировать этот модуль добавив следующие строчки в ваш файл конфигурации Apache:

LoadModule dpsearch_module       libexec/mod_dpsearch.so
AddModule mod_dpsearch.c

<Ifmodule mod_dpsearch.c>
DataparkSearchdConf /usr/local/dpsearch/etc/modsearchd.conf
    <Location /search>
        SetHandler dpsearch
        DataparkSearchTemplate /usr/local/dpsearch/etc/modsearch.htm
    </Location>
    <Location /storedoc>
        SetHandler dpstoredoc
        DataparkStoredocTemplate /usr/local/dpsearch/etc/modstoredoc.htm
    </Location>
</IfModule>

Этим модулем поддерживаются три директивы конфигурации: DataparkSearchdConf, DataparkSearchTemplate и DataparkStoredocTemplate. Необязательная директива DataparkSearchdConf задаёт файл конфигурации, аналогичный файлу конфигурации для searchd. Для сервера может быть указана только один такой файл. Директива DataparkSearchdTemplate указывает поисковый шаблон, аналогичный шаблону, используемому программой search.cgi. Директива DataparkStoredocTemplate указывает шаблон, для отображения сохранённой копии документа, аналогичный шаблону, используемому программой storedoc.cgi. Для сервера можут быть указано несколько директив DataparkSearchdTemplate и DataparkStoredocTemplate, по одной для каждого Location. Если указана директива DataparkSearchdConf, то в поисковых шаблонах не нужно указывать команды DBAddr.


8.3. Как создавать шаблоны результатов поиска

Пользователи DataparkSearch имеют возможность настраивать вывод результатов поиска (вывод search.cgi ). Эта настройка находится в файле search.htm, располагаемым в поддиректории /etc/ относительно корневой директории установки DataparkSearch.

Файл шаблона это обычный HTML файл, разделённый на секции.

Замечание: Каждая строка шаблона не должна превышать 1024 байт.

Каждая секци начинается с разделителя <!--sectionname--> и заканчивается разделителем <!--/sectionname-->, оба разделителя должны находится на отдельной строке, в её начале.

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

Формат переменных шаблона следующий:

$(x) - значение
$&(x) - значение с HTML-кодировкой недопустимых символов и выделением слов из запроса.
$*(x) - значение с HTML-кодировкой недопустимых символов.
$%(x) - значение с URL-кодированием запрещенных символов.
$^(x) - значение с выделением слов из поискового запроса.
$(x:128) - значение усекается до 128 байт, если оно длиннее.
$(x:UTF-8) - значение записывается в кодировке UTF-8. Можно указывать любую поддерживаемую кодировку.
$(x:128:right) - значение усекается слева до 128 байт, если оно длиннее.
$(x:cite:160) - вывести цитату значения по словам из запроса, длиной не более 160 символов (приблизительно).
$(url.host:idnd) - перекодировать имя хоста из пуникода в кодировку BrowserCharset.
$(x:json) - JSON-кодировка символов.


8.3.1. Секции шаблона

Определены следующие секции шаблонов: TOP>, BOTTOM>, RESTOP>, RES>, BETWEENRES>, CLONE>, RESBOT>, navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>, notfound>, noquery>, error>, variables>.


8.3.1.1. Секция TOP

Эта секция всегда вставляется первой на каждой странице ответов. Вы должны начинать эту секцию с <HTML><HEAD> и т.д. Также это подходящее место для размещения формы поиска. В этой секции вы можете использовать некоторые метасимволы (переменные шаблона):

$(self)     - аргумент атрибута ACTION тэга FORM
$(q)        - запрос на поиск
$(cat)      - текущее значение категории
$(tag)      - текущее значение тэга
$(rN)       - случайное число (здесь N - число)

Если вы хотите разместить на ваших страницах некоторые банеры случайным образом, используйте $(rN). Вы также должны поместить строчку типа RN xxxx в секции 'variables' (см. Разд. 8.3.2>), что даст вам для $(rN) значение из диапазона 0..xxxx. Вы можете использовать столько случайных переменных, сколько вам нужно.

Например: $(r0), $(r1), $(r45) и т.д.

Простая секция top может быть примерно такой:

<!--top-->
<HTML>
<HEAD>
 <TITLE>Search query: $(q)</TITLE>
</HEAD>
<BODY>

<FORM METHOD=GET ACTION="$(self)">
 <INPUT TYPE="hidden" NAME="ul" VALUE="">
 <INPUT TYPE="hidden" NAME="ps" VALUE="20">
 Search for: <INPUT TYPE="text" NAME="q" SIZE=30 
 VALUE="$&(q)">
 <INPUT TYPE="submit" VALUE="Search!"><BR>
</FORM>
<!--/top-->

Существует несколько переменных, указываемых в форме для установки различных параметров поиска. См. также Разд. 8.1.2>.

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

<SELECT NAME="lang">
<OPTION VALUE="en" SELECTED="$(lang)">English
.....
</SELECT>
    

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

Search through:
<SELECT NAME="ul">
<OPTION VALUE=""            SELECTED="$(ul)">Entire site
<OPTION VALUE="/manual/"    SELECTED="$(ul)">Manual
<OPTION VALUE="/products/"  SELECTED="$(ul)">Products
<OPTION VALUE="/support/"   SELECTED="$(ul)">Support
</SELECT>
для организации поиска по некоторым частям вашего сайта. Для способа хранения cache это ограничение работает только на уровне имени сайта из URL.

Выражение SELECTED="$(ul)" в примере выше (и во всехпримерах ниже) позволяет сохранять выбранным значение той или иной опции поиска на следующих страницах результатов. Если поисковый фронтэнд находит такое выражение, он выводит строку SELECTED только для того варианта OPTION, значение которого равно значению соответсвующей переменной.

pn равно ps*np. Эта переменная не используется DataparkSearch, но может быть полезна, например, в директиве <!INCLUDE CONTENT="..."> если вы хотите включить результаты поиска другой поисковой системы.

В этом примере формы помогается выбрать различные ограничения по времени.

<!-- 'search with time limits' options -->
<TR><TD>
<TABLE CELLPADDING=2 CELLSPACING=0 BORDER=0>
<CAPTION> 
Limit results to pages published within
a specified period of time.<BR>
<FONT SIZE=-1><I>(Please select only one option)
</I></FONT>
</CAPTION>
<TR>
<TD VALIGN=center><INPUT TYPE=radio NAME="dt" 
VALUE="back" CHECKED></TD>
<TD><SELECT NAME="dp">
<OPTION VALUE="0" SELECTED="$(dp)">anytime
<OPTION VALUE="10M" SELECTED="$(dp)">in the last ten minutes
<OPTION VALUE="1h" SELECTED="$(dp)">in the last hour
<OPTION VALUE="7d" SELECTED="$(dp)">in the last week
<OPTION VALUE="14d" SELECTED="$(dp)">in the last 2 weeks
<OPTION VALUE="1m" SELECTED="$(dp)">in the last month
<OPTION VALUE="3m" SELECTED="$(dp)">in the last 3 months
<OPTION VALUE="6m" SELECTED="$(dp)">in the last 6 months
<OPTION VALUE="1y" SELECTED="$(dp)">in the last year
<OPTION VALUE="2y" SELECTED="$(dp)">in the last 2 years
</SELECT>
</TD>
</TR>
<TR>
<TD VALIGN=center><INPUT type=radio NAME="dt" VALUE="er">
</TD>
<TD><SELECT NAME="dx">
<OPTION VALUE="1" SELECTED="$(dx)">After
<OPTION VALUE="-1" SELECTED="$(dx)">Before
</SELECT>

или так

<SELECT NAME="dm">
<OPTION VALUE="0" SELECTED="$(dm)">January
<OPTION VALUE="1" SELECTED="$(dm)">February
<OPTION VALUE="2" SELECTED="$(dm)">March
<OPTION VALUE="3" SELECTED="$(dm)">April
<OPTION VALUE="4" SELECTED="$(dm)">May
<OPTION VALUE="5" SELECTED="$(dm)">June
<OPTION VALUE="6" SELECTED="$(dm)">July
<OPTION VALUE="7" SELECTED="$(dm)">August
<OPTION VALUE="8" SELECTED="$(dm)">September
<OPTION VALUE="9" SELECTED="$(dm)">October
<OPTION VALUE="10" SELECTED="$(dm)">November
<OPTION VALUE="11" SELECTED="$(dm)">December
</SELECT>
<INPUT TYPE=text NAME="dd" VALUE="$(dd)" SIZE=2 maxlength=2>
,
<SELECT NAME="dy" >
<OPTION VALUE="1990" SELECTED="$(dy)">1990
<OPTION VALUE="1991" SELECTED="$(dy)">1991
<OPTION VALUE="1992" SELECTED="$(dy)">1992
<OPTION VALUE="1993" SELECTED="$(dy)">1993
<OPTION VALUE="1994" SELECTED="$(dy)">1994
<OPTION VALUE="1995" SELECTED="$(dy)">1995
<OPTION VALUE="1996" SELECTED="$(dy)">1996
<OPTION VALUE="1997" SELECTED="$(dy)">1997
<OPTION VALUE="1998" SELECTED="$(dy)">1998
<OPTION VALUE="1999" SELECTED="$(dy)">1999
<OPTION VALUE="2000" SELECTED="$(dy)">2000
<OPTION VALUE="2001" SELECTED="$(dy)">2001
</SELECT>
</TD>
</TR>
</TR>
<TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="range">
</TD>
<TD>
Between
<INPUT TYPE=text NAME="db" VALUE="$(db)" SIZE=11 MAXLENGTH=11>
and
<INPUT TYPE=text NAME="de" VALUE="$(de)" SIZE=11 MAXLENGTH=11>
</TD>
</TR>
</TABLE>
</TD></TR>
<!-- end of stl options -->


8.3.1.2. Секция BOTTOM

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

Ниже дан пример секции bottom:

<!--bottom-->
<P>
<HR>
<DIV ALIGN=right>
<A HREF="http://www.maxime.net.ru/">
<IMG SRC="dpsearch.gif" BORDER=0 
ALT="[Powered by DataparkSearch search engine software]">
</A>
</BODY>
</HTML>
<!--/bottom-->


8.3.1.3. Секция RESTOP

Эта секция вставляется непосредственно перед результатами поиска. Служит местом указания общих параметров результата поиска. Вы можете использовать для этого слудующие метасимволы (переменные):

  • $(first) - номер первого документа, отображаемого на этой странице

  • $(last) - номер последнего документа, отображаемого на этой странице

  • $(total) - общее число документов найденых документов

  • $(grand_total) - общее число документов найденых документов до группировки по сайтам

  • $(WE) - результат поиска со всей статистикой по каждой словоформе поискового запроса

  • $(W) - результат поиска со статистикой по словам запроса, указывается двумя числами, разделёнными знаком '/'. Первое число указывает число найденых вхождений слова из запроса, второе - число всех найденых словоформ этого слова. Например, test: 25/73 обозначает, что слово "test" найдено 25 раз, а число всех его словоформ ("test", "tests", "testing", и т.д..) - 73.

  • $(WS) - результат поиска в короткой форме с отображением числа всех словоформ каждого слова запроса.

  • $(SearchTime) - время выполения поискового запроса.

  • $(ndocs) - число документов в базе. Внимание: для больших баз данных это потребует больших ресурсов.

Ниже дан пример секции restop:

<!--restop-->
<TABLE BORDER=0 WIDTH=100%>
<TR>
<TD>Search<BR>results:</TD>
<TD><small>$(WE)</small></TD>
<TD><small>$(W)</small></TD>
</TR>
</TABLE>
<HR>
<CENTER>
Displaying documents $(first)-$(last) of total <B>$(total)</B> found.
</CENTER>
<!--/restop-->


8.3.1.4. Секция RES

Эта секция используется для вывода разнообразной информации о каждом найденном документе. Могут использоваться слудующие метасимволы (переменные):

  • $(URL) URL документа

  • $(Title) Заголовок документа

  • $(Score) Рейтинг документа (как он вычислен DataparkSearch

  • $(Body) Текст документа, первые несколько строк, или цитаты из документа по словам запроса, если используется stored, чтобы дать представление о содержимом документа.

  • $(Content-Type) Content-type документа (например, text/html)

  • $(Last-Modified) Дата последней модификации документа

  • $(Content-Length) Размер документа в байтах

  • $(FancySize) Размер документа в байтах, килобайтах или мегабайтах, что больше подходит

  • $(Order) Общий номер документа (в порядке показа результатов поиска), т.е. от 1 до $(total).

  • $(Pos) Новер документа на странице (в порядке показа результатов поиска), т.е. от 1 до $(ps).

  • $(meta.description) Описание документа (из тэга META DESCRIPTION)

  • $(meta.keywords) Ключевые слова документа (из тэга META KEYWORDS)

  • $(DY) Категория документа с путём, т.е. /home/computers/software/www/

  • $(CL) Лист клонов (см. подробности в Разд. 8.3.1.6>)

  • $(BrowserCharset) Кодировка, используемая для вывода результатов поиска

  • $(PerSite) При использовании группировки по сайту, число суммарное число документов с сайта найденного документа. Иначе, значение равно 0.

Замечание: Возможно указывать максимальное сичло символов, возвращаемых любой из описаных выше переменной. Например, $(URL) может возвращать длинный URL, который может разрушать табличный вывод результатов. Для указания максимального числа выводимых символов в отображаемом URL, используйте $(URL:xx), где xx - максимальное число символов: $(URL:40) вернёт URL, и если он окажется длиннее 40 символов, только превые 40 символов будут показаны на странице результатов поиска: http://very.long.url/path/veery/long/...

Ниже пример секции res:

<!--res-->
<DL><DT>
<b>$(Order).</b><a href="$(URL)" TARGET="_blank">
<b>$(Title)</b></a> [<b>$(Score)</b>]<DD>
$(Body)...<BR>
<b>URL: </b>
<A HREF="$(URL)" TARGET="_blank">$(URL)</A>($(Content-Type))<BR>
$(Last-Modified), $(Content-Length) bytes<BR>
<b>Description: </b>$(meta.description)<br>
<b>Keywords: </b>$(meta.keywords)<br>
</DL>
<UL>
$(CL)
</UL>
<!--/res-->


8.3.1.5. Секция BETWEENRES

Содержимое этой секции вставляется между результатами поиска, выврдимыми секцией RES. Это используется в том случае, если формат вашего документа с результатами поиска требует разделитель между записями. Например, при выдаче результатов в формате JSON (см. doc/samples/json.htm).


8.3.1.6. Секция CLONE

Содержимое этой секции включается в результат поиска вместо метасимвола $(CL) для каждого найденного клона документа. Служит для указания всех URL с одним и тем же содержимым (как зеркала и т.п.). Вы можете использовать те же мета символы, что и в секции res.

Ниже пример секции clone.

<!--clone-->
<li><A HREF="$(DU)" TARGET="_blank">$(DU)</A> ($(DC)) $(DM)
<!--/clone-->


8.3.1.7. Секция RESBOT

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

Вот пример секции resbot:

<!--resbot-->
<HR>
<CENTER>
Result pages: $(NL)$(NB)$(NR)
</CENTER>
<!--/resbot-->

Навигация - сложная штука, создаваемая из следующих секций шаблона: navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>.


8.3.1.8. Секция navleft, navleft_nop

Используются для образования ссылки на предыдущую страницу. Если предыдущая страница существует, исаользуется <!--navleft-->, если нет (на первой странице) - используется <!--navleft_nop-->.

<!--navleft-->
<TD><A HREF="$(NH)"><IMG...></A><BR>
<A HREF="$(NH)">Prev</A></TD>
<!--/navleft-->

<!--navleft_nop-->
<TD><IMG...><BR>
<FONT COLOR=gray>Prev</FONT></TD>
<!--/navleft_nop-->


8.3.1.9. Секция navbar0

Используется для печати текущей страницы в списе страниц.

<!--navbar0-->
<TD><IMG...><BR>$(NP)</TD>
<!--navbar0-->


8.3.1.10. Секции navright, navright_nop section

Эти секции используются для печати ссылки на следующую страницу. Если следующая страница существует, используется секция <!--navright-->, на последней странице используется <!--navright_nop-->.

<!--navright-->
<TD>
<A HREF="$(NH)"><IMG...></A>
<BR>
<A HREF="$(NH)">Next</A></TD>
<!--/navright-->

<!--navright_nop-->
<TD>
<IMG...>
<BR>
<FONT COLOR=gray>Next</FONT></TD>
<!--/navright_nop-->


8.3.1.11. Секция navbar1

Используется для печати ссылок на другие страницы списка страниц результата поиска.

<!--navbar1-->
<TD>
<A HREF="$(HR)">
<IMG...></A><BR>
<A HREF="$(NH)">$(NP)</A>
</TD>
<!--/navbar1-->


8.3.1.12. Секция notfound

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

Ниже пример секции notfound:

<!--notfound-->
<CENTER>
Sorry, but search hasn't returned results.<P>
<I>Try to compose less restrictive search query or check spelling.</I>
</CENTER>
<HR>
<!--/notfound-->


8.3.1.13. Секция noquery

Эта секция выводится если пользователь выдал пустой запрос на поиск.. Ниже приводится пример этой секции:

<!--noquery-->
<CENTER>
You haven't typed any word(s) to search for.
</CENTER>
<HR>
<!--/noquery-->


8.3.1.14. Секция error

Эта секция выводится только при обнаружении ошибок во время поиска. Например, если не запущен SQL сервер и т.п. Вы можете использовать следующий метасимвол (переменную): $(E) - текст сообщения об ошибке.

Пример секции error:

<!--error-->
<CENTER>
<FONT COLOR="#FF0000">An error occured!</FONT>
<P>
<B>$(E)</B>
</CENTER>
<!--/error-->


8.3.2. Секция Variables

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

Секция variables обычно выглядит примерно так:

<!--variables
DBAddr		  mysql://foo:bar@localhost/search/?dbmode=single
VarDir            /usr/local/dpsearch/var/
LocalCharset	  iso-8859-1
BrowserCharset    iso-8859-1
TrackQuery	  no
Cache		  no
DetectClones	  yes
HlBeg		  <font color="blue"><b><i>
HlEnd		  </i></b>
R1		  100
R2		  256
Synonym		  synonym/english.syn
ResultContentType text/xml
Locale            ru_Ru.KOI8-R
TZ                Australia/Sydney
-->

Замечание: Так же как и в indexer.conf, имя хоста в DBAddr имеет значение только для поддерживаемых баз данных и не играет никакой роли при использовании ODBC баз данных. В случае ODBC, используйте имя базы в DBAddr для указания ODBC DSN.

Команда VarDir задаёт альтернвтивный путь рабочей директории при использовании способа хранения cache. По умолчанию используется поддиректория /var относительно корневой директории установки DataparkSearch.

Команда LocalCharset указывает кодировку локальной базы данных. Должна совпадать с кодировкой, заданной этой же командой в indexer.conf.

Команда BrowserCharset указывает, какая кодировка используется для вывода результатов поиска. Она может отличаться от значения, указанного в LocalCharset. Значения всех метасимволов (переменных) при выводе будут перекодированы в эту кодировку, однако сам шаблон не перекодируется, он уже должен быть в этой кодировке.

Используйте "Cache yes/no" для включения/выключения кэширования результатов поиска.

Используйте "DetectClones yes/no" для включения/выключения определения клонов. Выключено по умолчанию при поиске.

Используйте "GroupBySite yes/no/full" для включения/выключения группировки результатов по url.site_id. Если указана опция yes, группируются только результаты с того же самого сайта, идущие подряд. Если же указана опция full, в этом случае группируются все результаты с того же самого сайта.

Замечание: Если используется searchd, вы должны указывать GroupBySite в вашем файле searchd.conf, или передавать его как CGI параметр.

Если используется способ хранения cache, необходимо также создать лимит по сайту (см. Разд. 5.2.8>).

Используйте команду PagesInGroup для указания числа дополнительных результатов с одного сайта при группировке результатов а-ля Google.

Вы можете использовать команду MaxSiteLevel для задания максимального уровня доменного имени, используемого для расчёта site_id. Значение по умолчанию: 2. Одно исключение: трёх и менее буквенные домены второго уровня считаются доменами первого уровня. Например: domain.ext - уровень 2, www.domain.ext - уровень 3, domain.com.ext - уровень 2. Отрицательное значение для MaxSiteLevel означает группировку на уровне поддиректорий, т.е. при уровне -1 www.site.ru/dir1/ и www.site.ru/dir2/ группируются как разные сайты.

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

Команда Alias в search.htm похожа на одноимённую команду в indexer.conf, но имеет действие на отображение результатов поиска, а не при индексировании. См. детали в Разд. 3.7>.

Команды R1 и R2 задают диапазон значений для переменных шаблона $(R1) и $(R2).

Команда Synonym используется для загрузки указанного списка синонимов. Имя файла синонимов может быть и абсолютным и относительно поддиректории /etc коренвой директории установки DataparkSearch.

Команда DateFormat служит для изменения формата вывода даты последней модификации файла. При задании своего формата, используйте метапеременные функции strftime.

Замечание: Если используется searchd, вы можете указывать DateFormat в вашем файле searchd.conf (отличие состоит в необходимости заключать строку фомата в кавычки "), или передавать как CGI параметр.

Команда "Log2stderr yes/no" предписывает выводить все сообщения об ошибках на stderr.

Команда ResultsLimit может быть использована для ограничения максимального числа выводимых результатов поиска. При использовании searchd, эта команда может быть указана в файле конфигурации searchd.conf.

Команда ResultContentType используется для указания заголовка Content-Type страницы с результатами. Значение по умолчанию: text/html.

Команда Locale используется для указания заголовка для задания LC_ALL локали при выдаче результатов поиска. Значение по умолчанию: не определено (используется установленное ранее значение).

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

При помощи команды MakePrefixes yes вы можете автоматически расширять поисковый запрос префиксами слов запроса. В частности, это можно использовать при организации подсказок при поиске. (См. также Разд. 3.10.56>)


8.3.3. Включения в шаблонах

Вы можете использовать <!INCLUDE Content="http://hostname/path"> дял включения внешних URLs в страницу результатов поиска.

ВНИМАНИЕ: Вы можете использовать <!INCLUDE> ТОЛЬКО в следующих секциях шаблона:

<!--top-->
<!--bottom-->
<!--restop-->
<!--resbot-->
<!--notfound-->
<!--error-->

Это пример использования включения:

<!--top-->
....
<!INCLUDE CONTENT="http://hostname/banner?query=$&(q)">
...
<!--/top-->


8.3.4. Условные операторы в шаблонах

DataparkSearch поддерживет в шаблонах условные операторы: <!IF, <!ELSE, <!ENDIF, <!ELIF, <!ELSEIF, <!SET, <!COPY, <!IFLIKE, <!IFREGEX, <!ELIKE, <!EREGEX, <!ELSELIKE, <!ELSEREGEX.

<!IF   NAME="Content-Type" Content="application/pdf">
<img src="pdf.png">
<!ELIF NAME="Content-Type" Content="text/plain">
<img src="text.png">
<!ENDIF>

Возможно использовать вложенные конструкции условных операторов. Это обеспечивает большую гибкость при написании шаблонов результатов поиска. Смотрите примеры использования в файле etc/search.htm-dist.


8.3.5. О безопасности

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


8.4. Дизайн search.html

В этой секции подразумевается, что в качестве фронтэнда используется search.cgi.


8.4.1. Как создаётся страница результатов

Файл etc/search.htm состоит из некоторого числа блоков, разделённых HTML комментариями, начинающимися с <!--comment--> и заканчивающимися <!--/comment-->.

Блок <!--variables--> только используется search.cgi Остальные блоки формируют части страницы результатов поиска в зависимости от ситуации.

Блоки <!--top--> и <!--bottom--> всегда показываются пользователям как верх и низ страницы результатов соответственно.

также существуют следующие блоки <!--restop-->, <!--res--> and <!--resbot--> , блоки навигации и блоки <!--notfound-->, <!--noquery--> and <!--error-->. Последние выдаются в зависимости от результата поиска.

Любой HTML-код, расположенный вне этих блоков, игнорируется.

Таким образом, вывод search.cgi всегда будет примерно таким:

				
  top                 
  restop                top                 top              top
  res           или     notfound     или    error     или    noquery
  resbot                bottom              bottom           bottom
  (navigation)
  bottom
			
			

Навигационный блок строится таким же образом. Блоки <!--navleft--> и <!--navright--> отображаются на всех страницах и ссылаются на предыдущую и на следующую страницы с результатами поиска, тогда как <!--navXXX_nop--> используются, если нет больше страниц в том или другом направлении.


8.4.2. Ваш HTML-шаблон

Простейший HTML-шаблон, необходимый для работы, дан в etc/search.htm-dist. Рекомендуется начать работу именно с него, внеся только ваши настройки в блок <!--variables-->.

Если вы решили украсить ваш поиск, у вас есть два пути. Первый: оставить простой дизайн search.htm, но сделать его частью набора фреймов. Таким образом вы можете добавить меню и др. элементы в одном фрейме, и оставить вывод search.htm в другом.

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

Например, вы желаете видеть страницу как таблицы примерно такого вида:

                   ----------------------------------
                  |       верхняя таблица            |
                  |..................................|
                  |        .                         |
                  |левая   .                         |
                  |        .                         |
                  |        .     основная таблица    |
                  |таблица .                         |
                  |        .                         |
                  |        .                         |
                   ----------------------------------

Если планируется поместить результаты поиска в основную таблицу, вы можете поместить в блок <!--top--> в search.htm весь HTML-код вплоть до открытия основной таблицы (<table><tr><td>). Если вы также поместите код закрытия основной таблицы и остальные закрывающие тэги страницы в блок <!--bottom--> (</table></tr></td></body></html>) и оставите остальные блоки без изменения, вы получите желаемый табличный дизайн и результаты поиска будут в основной таблице.

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

Отдельные блоки могут быть отформатированы как угодно, если такое форматирование закончено в пределах этого блока. Т.е. ничто не мешает делать что-то вроде этого:

  <!--error-->
    <table>
    <tr><td bgcolor"red">
      <font color="#ffffff">  
      [error variables]
      </font>
    </tr><td>
    </table>
  <!--error-->
		

Чего вы не можете сделать без редактирования исходного кода DataparkSearch, это изменить порядок обработки блоков из search.htm.


8.4.3. О формах

Многие современные браузеры могут работать с формами, разнесёнными по разным элементам таблицы или разным таблицам, однако создание таких форм противоречит всем стандартам создания HTML-кода. Создавайте такие формы только когда не можете избежать этого.

Например,

  <table>
  <tr><td>
     <form>
     <input type="text" name="something">
     <input type="radio" name"button1">
     <input type="radio" name"button2">
     </form>
  </tr></td>
  </table>
			
это допустимо, а
  <table>
    <tr><td>
       <form>
       <input type="text" name="something">
    </tr></td>
  </table>
  <table>
    <tr><td>
       <input type="radio" name"button1">
       <input type="radio" name"button2">
       </form>
    </tr></td>
    </table>
			
это нет.

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

  Results per page:
  <SELECT NAME="ps">
  <OPTION VALUE="10" SELECTED="$ps">10
  <OPTION VALUE="20" SELECTED="$ps">20
  <OPTION VALUE="50" SELECTED="$ps">50
  </SELECT>
			
вы можете заменить это на
  <input type="radio" name="ps" value="10" checked="$(ps)">
  <input type="radio" name="ps" value="20" checked="$(ps)">
  <input type="radio" name="ps" value="50" checked="$(ps)">
			
в результате чего получим три кнопки-переключалки вместо выпадающего меню, с тем же значением "20" по умолчанию и с той же функциональностью. Единственное, что вы не можете делать, это давать возможность множественного выбора в меню типа <type="checkbox"> или <select multiple>.

Заметим, что вы можете также использовать формат

  <input type="hidden" name="XX" value="YY">
  			
если вы хотите использовать другие значения вместо значений по умолчанию и/или не заботить пользователя выбором значения этого параметра.


8.4.4. Относительные ссылки в search.htm

Необходимо отметить, что search.htm обрабатывается в вашей cgi-bin директории. Позиция этой директории относительно корня определяется вашим веб-сервером независимо от ее расположения на файловой системе. Вполне вероятно, это http://your_document_root/cgi-bin/ . Т.к. search.cgi расположен в cgi-bin, любая ссылка на изображения или др. в search.htm подразумевает, что cgi-bin - базовая директория. Тем самым, если у вас файловая система вида

   home/
   home/your_document_root/
   home/your_document_root/img/
   home/cgi-bin/
			
правильная относительная ссылка с search.cgi на изображения в img/ должна быть <img src="../img/image.gif">, несмотря на несоответствие структуре файловой системы.


8.4.5. Добавление формы поиска на другие страницы

Чтобы добавить форму поиска на любой вашей страницы, разместите следующий код на этих страницах где сочтёте нужным:

<FORM 
	METHOD=GET 
	ACTION="http://path-to-search.cgi">
      <INPUT TYPE="text" NAME="q" VALUE="">
      <INPUT TYPE="submit" VALUE="Search!">

</FORM>


8.5. Релевантность

8.5.1. Упорядочивание документов

При сортировке документов перед выдачей результата поиска DataparkSearch по умолчанию учитывает два параметра каждого документа: релевантность и популярность. Сначала документы сортируются по релевантности, а при равенстве, по популярности.


8.5.2. Расчёт релевантности

Релевантность каждого документа вычисляется как косинус угла между вектором весов этого документа и вектором весов, соответствующему поисковому запросу, умноженный на 100%. Число координат векторов весов равно произведению числа слов в запросе (с учётом всех словоформ и синонимов) на число секций, определённых в indexer.conf. Каждая координата вектора весов соответсвует слову из запроса в той или иной секции документа. И значение для этой координаты вычисляется на основе весов секций, заданных параметром wf (см. Разд. 8.1.3>) и на основании того, является ли данное слово именно указанным в запросе или его словоформой. Также еще одна координата соответсвует среднему расстоянию между найденными словами в данном документе. Для вектора запроса эта координата полагается равной 0.

Т.к. в файлах конфигурации поисковых фронтэндов (searchd.conf или search.htm) не предусмотрено указание секцией, используйте команду NumSections для указания числа используемых секций (по умолчанию оно равно 256). Впрочем, точное число секций не играет решающей роли в порядке сортировки документов, только в значении рейтинга релевантности.

Таблица 8-3. Параметры расчёта релевантности, задаваемые при компиляции (ключи для configure)

--enable-rel

Включает полный (full), быстрый (fast) или ультра (ultra) вариант расчёта релевантности. Значение по умолчанию: full (или полный расчёт релевантности).

--disable-reldistance

Выключает учёт среднего растояния между словами при расчёте релевантности. Значение по умолчанию: включено.

--disable-relposition

Выключает учёт позиции первого слова из запроса в тексте документа при расчёте релевантности. Значение по умолчанию: включено.

--disable-relwrdcount

Выключает учёт чисел вхождения слов из запроса в найденом документе при расчёте релевантности. Значение по умолчанию: включено.

--with-bestpos=NUM

Задаёт NUM в качестве лучшего значения первой позиции слова запроса в найденом документе. Значение по умолчанию: 4.

--with-bestwrdcnt=NUM

Задаёт NUM в качестве лучшего числа каждого из слов запроса в найденом документе. Значение по умолчанию: 11.

--with-distfactor=NUM

Задаёт NUM в качестве коэффициента для среднего растояния между словами запроса в найденом документе. Значение по умолчанию: 0.2.

--with-posfactor=NUM

Задаёт NUM в качестве коэффициента для расстояния между первой позицией слова запроса в найденом документе и значением, указаным параметром --with-bestpos. Значение по умолчанию: 0.5.

--with-wrdcntfactor=NUM

Задаёт NUM в качестве коэффициента для расстояния между числом слова запроса в найденом документе и значением, указаным параметром --with-bestwrdcnt. Значение по умолчанию: 0.4.

--with-wrdunifactor=NUM

Задаёт NUM в качестве коэффициента для величины отклонения количеств вхождения слов запроса в найденый документ от равномерного распределения. Значение по умолчанию: 1.5.


8.5.3. Рейтинг популярности

DataparkSearch поддерживает два метода расчёта рейтинга популярности. Метод, использовавшийся в предыдущих версиях получил название Goo, а новый метод называется Neo. По умолчанию используется метод Goo. Чтобы выбрать нужный метод расчёта популярности используйте команду PopRankMethod:

PopRankMethod Neo

Для метода расчёта популярности Neo,а также для полного варианта метода Goo вам необходимо включить сбор ссылок между страницами командой CollectLinks yes в вашем файле конфигурации indexer.conf. Однако, это незначительно уменьшает скорость индексирования, поэтому по умолчанию сбор этих ссылок выключен.

По умолчанию, для расчета рейтинга популярности используются только ссылки между различными сайтами. Если в indexer.conf указана опция PopRankSkipSameSite no, то при расчёте рейтинга популярности учитываются все ссылки.

Вы можете присвоить начальное значение рейтинга популярности страницы используя МЕТА таг DP.PopRank (см. Разд. 4.3>).


8.5.3.1. Метод расчёта популярности Goo

Рейтинг популярности рассчитывается в два этапа. На первом этапе значение параметра Weight для каждого сервера делится на число ссылок со страниц этого сервера. Таким образом определяется вес одной ссылки с этого сервера. На втором этапе для каждой страницы находится ссума весов всех ссылок, указывающих на эту страницу. Эта сумма и является индексом популярности страницы.

По умолчанию значение параметра Weight для каждого сервера равно 1. Изменить это значение вы можете непосредственно в SQL-таблице server или при помощи команды ServerWeight в файле конфигурации indexer.conf.

Если в indexer.conf указана опция PopRankFeedBack yes, то перед расчётом рейтинга популярности страниц рассчитывается рейтинг сайтов. Для этого для каждого сайта находится сумма популярности всех его страниц, если она окажется меньше 1, то рейтинг сайта полагается равным 1, в противном случае он полагается равным найденной сумме.

Если в indexer.conf указана опция PopRankUseTracking yes, то перед расчётом рейтинга популярности страниц в качестве рейтинга сайтов будет использована сумма числа запросов уточнения поиска для каждого сайта (т.е. число запросов поиска только среди документов с этого сайта).

Если в search.htm (или searchd.conf) указана опция PopRankUseShowCnt yes, то для каждого выводимого пользователю результата поиска, имеющего значение релевантности выше, заданного командой PopRankShowCntRatio (по умолчанию используется значение 25.0), значение url.shows увеличивается на 1. Если в indexer.conf указана опция PopRankUseShowCnt yes, то при расчёте рейтинга популярности страниц, к полученному на предыдущих этапах значению рейтига каждой страницы будет прибавлено значение url.shows, умноженное на значение, заданное опцией PopRankShowCntWeight (по умолчанию используется значение 0.01).

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

Вы можете использовать команду PopRankNeoIterations для задания числа итераций при расчёте популярности методом "Neo". Значение по умолчанию: 3.

По умолчанию, расчёт рейтинга популярности методом "Neo" ведётся одновременно с индексирования. Для ускорения индексирования, вы можете отложить расчёт рейтинга популярности методом "Neo" указав команду:

PopRankPostpone yes

Затем вы можете расчитать рейтинг популярности методом "Neo" также как и для метода "Goo", т.е.: indexer -TR


8.5.4. Булевы запросы

При булевом поиске, состоящем из двух и более слов, необходимо вводить операторы (&, |, ~). Т.е. необходимо вводить a & book вместо a book. См. также Разд. 8.1.7>.


8.5.5. Crosswords

Эта возможность позволяет связать слова между <a href="xxx"> и </a> с документом, на который указывает данная ссылка, а также слова из аттрибута alt тэга img с картинкой, на которую указывает этот тэг. Для включения этой возможности, используйте команду CrossWords yes в indexer.conf и search.htm, а также определите секцию crosswords в файле sections.conf.

При помощи команды CrossWordsSkipSameSite можно управлять сбором кросс-слов со страниц того же сайта. Если указана опция yes (по умолчанию), то сбор кросс-слов со страниц того же сайта не происходит. Для включения учета таких слов необходимо явно задать опцию no:

CrossWordsSkipSameSite no


8.5.6. Алгоритм Построения Рефератов (SEA)

Алгоритм Построения Рефератов (SEA) позволяет построить реферат из трёх наиболее релевантных предложений для каждого проиндексированого документа, состоящего из более 6 предложений. Чтобы включить эту возможность, добавьте эту команду в ваш файл seaction.conf:

Section sea x y
где x - номер секции и y - максимальный размер значения секции, задайте его равным 0, если вы не хотите показывать эту секцию на тсраницах результатов поиска. Если вы указываете ненулевое значение для y, вы можете использовать мета-переменную $(sea) в вашем шаблоне поиска для отображения реферата в результатах поиска.

Соответствующие команды конфигурирования:

Команда SEASentenceMinLength задаёт минимальную длину предложения, которое будет использовано для создания реферата. Значение по умолчанию: 32.

Команда SEASentences используется для задания максимального числа предложений, используемых при построении реферата. Значение по умолчанию: 64. В виду нелинейной сложности алгоритма SEA, вы можете установить значение этого параметра исходя из желаемой производительности индексирования.

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

SEASections "body, title"


8.6. Регистрация поисковых запросов

DataparkSearch поддерживает регистрацию поисковых запросов.

При выполнении поисковых запросов, DataparkSearch использует таблицу qtrack для записи поискового запроса, IP адреса клиента, числа найденных документов и текущего времени в UNIX фомате, а также таблицу qinfo для записи всех параметров запроса.

Для того, чтобы включить регистрацию запросов, добавьте параметер trackquery для соответсвующей команды DBAddr (см. Разд. 3.10.2>) вашего шаблона поиска search.htm. Например:

DBAddr pgsql://user:pass@localhost/search/?dbmode=cache&trackquery

Замечание: Если используется searchd, этот параметр необходимо добавить только в командуDBAddr из файла searchd.conf.

Вы можете использовать команду TrackDBAddr для указания другой SQL-базы для сохранения параметров поисковых запросов. Эта SQL-база должна содержать теже таблицы qtrack и qinfo, что и база DataparkSearch.

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

SELECT qwords,count(*),sum(found),avg(found) FROM qtrack GROUP BY qwords;


8.7. Кэш результатов поиска

Кэш результатов поиска обеспечивает быстрый ответ search.cgi на недавно повторенные запросы, а также при навигации от страницы к странице результатов того же поиска.

Кэш результатов поиска выключен поумолчанию. Вам необходимо использовать команду "Cache yes" в search.htm для вкючения кэширования результатов поиска. Если используется searchd, команду "Cache yes" необходимо добавить в searchd.conf.

Кэш результатов поиска располагается в поддиректории $PREFIX/var/cache/, где $PREFIX - корневая директория установки DataparkSearch. Результат каждого поиска хранится в виде отдельного файла.

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

HoldCache <time>
См. формат <time> в описании команды Period из Разд. 3.10.28>.
HoldCache 3h


8.8. Нечёткий поиск

8.8.1. Ispell

Когда DataparkSearch используется с поддержкой ispell, для расширения поискового запроса нахождятся все грамматические формы введенных слов. При индексировании все найденные слова сохраняются в базе, а при поиске для каждого введенного слова находятся все его грамматические формы и уже с учетом всех этих форм производится поиск документов. Т.е., поисковик будет искать слово "test", если в качестве запроса введены слова "testing" или "tests".


8.8.1.1. Два типа файлов ispell

DataparkSearch понимает два типа файлов ispell: файлы аффиксов и файлы словарей. Файл аффиксов Ispell состоит из правил для слов и имеет примерно такой формат:

Flag V:
       E   > -E, IVE      # As in create> creative
      [ˆE] > IVE          # As in prevent > preventive
Flag *N:
       E   > -E, ION      # As in create > creation
       Y   > -Y, ICATION  # As in multiply > multiplication
     [ˆEY] > EN           # As in fall > fallen

Файл словаря Ispell содержит сами слова и имеет следующий формат:

wop/S
word/DGJMS
wordage/S
wordbook
wordily
wordless/P


8.8.1.2. Использование Ispell

Для использования ispell в DataparkSearch необходимо задать команды Affix и Spell в search.htm. Формат этих команд:

Affix [язык] [кодировка] [имя файла аффиксов ispell]
Spell [язык] [кодировка] [имя файла словаря ispell]

Первый параметр обоих команд - стандартный двуюуквенный код языка. Воторой - имя кодировки, при помощи которой закодированы файлы ispell. Третий параметр указывает имя файла, абсолютное, или отностительно поддиректории etc/ корневой директории DataparkSearch

Замечание: Поддерживает загрузка данных для нескольких языков, например:

Affix en iso-8859-1 en.aff
Spell en iso-8859-1 en.dict
Affix de iso-8859-1 de.aff
Spell de iso-8859-1 de.dict

Будет загружена поддержка для английского и немецкого языков.

Если используется searchd, эти команды следует указывать в searchd.conf.

Если DataparkSearch используется с поддержкой ispell, рекомендуется исопльзовать searchd, особенно для поддержки нескольких языков. Иначе время запуска search.cgi увеличивается.


8.8.1.3. Настройка словарей

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

Вы также можете создать список таких слов по одному на каждую строку:

rare.dict:
----------
webmaster
intranet
.......
www
http
---------
			

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

postmaster/MS

Таким образом, webmaster с флагом MS, возможно будет правильным:

webmaster/MS

Скопируйте составленный вами словарь в поддиректорию /etc корневой директории установки DataparkSearch и добавьте соответсвующие команды в файл конфигурации.


8.8.1.4. Где взять файлы Ispell

Вы можете найти файлы Ispell для многих языков на этой странице.

Для японского языка созданы квази-Ispell файлы, предназначенные для использования только с DataparkSearch. Вы можете скачать эти файлы с нашего веб-сервера или с одного из наших зеркал. См. Разд. 1.2>.


8.8.1.5. Модификация слов поисковых запросов

Quffix [lang] [charset] [ispell-like suffix file name]
Команда Quffix похожа на команду Affix, описанную выше, за исключением того, что эти правила применяются к словам, указанным в запросе, а не к их нормальным формам, как это происходит для команды Affix. Загружаемый файл должен содержать только суффиксные правила (в терминах афиксных файлов ispell).

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


8.8.2. Aspell

Когда DataparkSearch используется с поддержкой aspell, возможно автоматическое расширение поискового запроса вариантами слов с исправленым правописанием. Чтобы включить эту возможность, необходимо установить Aspell на вашу систему до сборки DataparkSearch. Чтобы включить эту возможность, необходимо добавить команду AspellExtensions yes в файлы конфигурации indexer.conf и search.htm (или searchd.conf, если используется searchd).

Автоматиская корректировка правописания при поиске происходит только при установке параметра поиска sp, см. Разд. 8.1.2>.


8.8.3. Синонимы

Файлы синонимов устанавливаются в поддиректорию etc/synonym относительно корневой директории установки DataparkSearch. Большие файлы синонимов для некоторых языков вы должны скачать отдельно с нашего сайта или с одного из наших зеркал, см. Разд. 1.2>.

Для включения поддержки синонимов, добавьте в шаблон поиска search.htm команды вида Synonym <filename>, например:

Synonym synonym/english.syn
Synonym synonym/russian.syn

Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории etc установки DataparkSearch.

Если используется searchd, добавьте эти команды вместо шаблона поиска в searchd.conf.

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

Language: en
Charset:  us-ascii

  • Language - стандартный (ISO 639) двубуквенный код языка.

  • Charset - любая кодировка, поддерживаемая DataparkSearch (see Разд. 7.1>). Список синонимов должен быть закодирован с использованием этой кодировки.

Дополнительно вы можете указать в списке синонимов команду:

Thesaurus: yes

Эта команда включает режим тезауруса для списка синонимов. В этом режиме только слова, расположенные на одной строке считаются синонимами.


8.8.4. Поиск без учёта акцентов над буквами

Начиная с версии 4.17 DataparkSearch также поддерживает нечувствительный к акцентам над буквами поиск.

Чтобы включить поддержку этой возможности, используйте команду AccentExtensions в вашем шаблоне search.htm (или в файле конфигурации searchd.conf, если используется searchd) для автоматического построений копий слов из запроса без учёта акцентов над буквами, и в вашем файле конфигурации indexer.conf для автоматического добавления таких копий в базу.

AccentExtensions yes

Если команда AccentExtensions в файле конфигурации указана перед командами Spell и Affix, то копия этих данных без учёта акцентов над буквами будет загружаться автоматически.


8.8.5. Акронимы и аббревиатуры

Начиная с версии 4.30 поддерживается нечёткий поиск на основе акронимов и аббревиатур.

Файлы акронимов и аббревиатур устанавливаются в поддиректорию etc/acronym относительно корневой директории установки DataparkSearch.

Для включения поддержки акронимов и аббревиатур, добавьте в шаблон поиска search.htm команды вида Acronym <filename>, например:

Acronym acronym/en.fido.acr
Acronym acronym/en.acr

Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории etc установки DataparkSearch.

Если используется searchd, добавьте эти команды вместо шаблона поиска в searchd.conf.

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

Language: en
Charset:  us-ascii

  • Language - стандартный (ISO 639) двубуквенный код языка.

  • Charset - любая кодировка, поддерживаемая DataparkSearch (see Разд. 7.1>). Список синонимов должен быть закодирован с использованием этой кодировки.

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

#* regex last "([0-9]{2})[- \.]?([0-9]{2})[- \.]?([0-9]{2})" "+78622$1$2$3"

Этот комментарий задает преобразование из широко используемого формата записи локалных телефонных номеров, 99-99-99, в канонический формат, +78622XXXXXX. Таким образом телефонные номера становится возможным искать независимо от формата, в котором они были записаны. Опция last здесь означает, что процесс применения регулярных выражений останавливается после применения этого правила.

Пожалуйста, присылайте ваши списки синонимаов на адрес .


Глава 9. Разное

9.1. Сообщение о багах

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

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


9.1.1. Известные ошибки и баги

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


9.1.2. Посмертные дампы

Если indexer или search.cgi умирают во время своей работы и оставляют посмертный дамп, очень полезно сообщить нам вывод gdb (The GNU Debugger). Чтобы получить этот вывод, пожалуйста, выполните следующие шаги. Убедитесь, что DataparkSearch собран с опцией --with-debug для configure. Если нет, пересоберите его с этой опцией и попытайтесь повторить ситуацию, приведшую к трапу. Затем, пусть, например, умершей программой будет indexer, а файл посметрного дампа имеет имя indexer.core (или просто core на некоторых платформах).

Запустите GNU Debugger вместе с именем программы в качестве первого аргумента и с именем файла посмертного дампа в качестве второго:

gdb indexer indexer.core

Отобразится некоторая информация о месте трапа:

Core was generated by `indexer'.
Program terminated with signal 8, Floating point exception.
Reading symbols from /usr/lib/libc.so.3...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0  0x80483f3 in main () at indexer.c:4
4               printf("%d",0/0);

Затем наберите команду thread apply all backtrace:

(gdb) thread apply all bt
#0  0x80483f3 in main () at indexer.c:4
#1  0x804837d in _start ()

Сообщите нам вывод в первом и втором случаях или просто скриншот сессии gdb.


9.2. Использование библиотеки libdpsearch

При компиляции DataparkSearch собирается и устанавливается libdpsearch - библиотека, с помощью которой легко расширить Ваше приложение возможностью поиска. Программа на СИ, использующая libdpsearch, должна включить заголовочный файл dpsearch.h.


9.2.1. Скрипт dps-config

В зависимости от параметров, выбраных при компиляции DataparkSearch, libdpsearch может требовать дополнительные библиотеки. Например, при использовании MySQL в качестве хранилища DataparkSearch, библиотека libmysqlclient также понадобится при линковки приложения с libdpsearch. В каталоге /bin относительно коренвой директории установки DataparkSearch вы можете найти скрипт dps-config Этот скрипт позволяет упростить процедуру учета всех необходимых зависимостей. dps-config понимает несколько опций командной строки. По-умолчанию dps-config выдает все доступные опции запуска:

Usage: ./dps-config [OPTIONS]
Options:
        [--version]
        [--libs]
        [--cflags]

Запущенный с --libs, dps-config выдает все флаги компановщика, необходимые для подключения libdpsearch, например:

# ./dps-config --libs
-lm -L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/local/dpsearch/lib -ldpsearch

Вы можете включить вывод команды dps-config --libs в строку запуска компилятора СИ:

cc myprog.c -o myprog `dps-config --libs`


9.2.2. DataparkSearch API

Описания API DataparkSearch пока нет. Это связано с тем, что API находится под постоянным изменением от версии к версии, и пока не стабилизирован. В качестве примера приложения, использущего библиотеку libdpsearch, можно изучить программу search.c.


9.3. Структура таблиц базы данных

Полная структура таблиц базы данных, используемых DataparkSearch, описана в sql-скрптах создания структуры базы данных, находящихся в соответстувующих директориях поддиректории create.

Таблица 9-1. Структура таблицы server

rec_idУникальный идентификатор записи.
enabledФлаг включения записи для загрузки при старте indexer.
urlURL или его фрагмент или шаблон, указываемый в соответствующей команде.
tagЗначение тэга для этого ресурса.
categoryСсылка на запись в наблице categories, соответсвующей категории для данного ресурса.
command

=S - тип записи сервер

=F - типа записи фильтр

ordreКлюч сортировки, задающий порядок загрузки записей таблицы server при запуске indexer.
parentЕсли значение не ноль, запись содержит в поле url имя сервера, добавленного автоматически при индексировании. Значение этого поля равно url_id записи этой таблицы, на основании которой дабавлена эта запись.
weightВес данной записи при подсчёте рейтинга популярности документов.
pop_weightВес одной ссылки со страниц данного русурса. Рассчитывается автоматически. Изменнеие значения вручную никакого влияния не оказывает.

Остальные параметры серверов хранятся в таблице srvinfo, аналогичной по структуре таблице urlinfo. Значения некоторых параметров приведены в таблице ниже.

Таблица 9-2. Значения некоторых параметров серверов в таблице srvinfo

Значение snameВозможные значения sval.
AliasАлиас для указанного в поле server.url.
PeriodИнтервал между повторными индексированиями этого ресурса, задаваемый в секундах.
DeleteOlderЗадаёт сколько времени хранить проиндексированные документы в базе.
RemoteCharsetЗначение кодировки документа по умолчанию для данного ресурса.
DefaultLangЗначение языка документа по умолчанию для данного русурса.
Request.AuthorizationУчётные данные, используемые для доступа с использованием авторизации.
Request.ProxyИмя прокси-сервера, используемое при доступе через прокси-сервер.
Request.Proxy-AuthorizationАвторизация на прокси-сервере.
MaxHopsМаксимальная глубина перехода по ссылкам от корневого индеска.
IndexФлаг, указывающий индексировать или нет документы данного ресурса.
Follow

=0, "page"

=1, "path"

=2, "site"

=3, "world"

RobotsФлаг указывающий использование robots.txt для данного ресурса.
DetectClonesФлаг включения механизма определения "клонов".
MaxNetErrorsМаксимальное число ошибок сети для этой записи. Аналог команды MaxNetError в indexer.conf.
NetDelayTimeВремя задержки индексирования сети при обнаружении ошибки сети при его пролучении.
ReadTimeoutТаймаут ожидания получения документа с этого ресурса.
match_type

=0, DPS_MATCH_FULL - полное совпадение.

=1, DPS_MATCH_BEGIN - совпадает начало.

=2, DPS_MATCH_SUBSTR - шаблон является подстрокой проверяемой ссылки.

=3, DPS_MATCH_END - совпадает конец.

=4, DPS_MATCH_REGEX - шаблон является регулярным выражением, на соответствие которому проверяются ссылки.

=5, DPS_MATCH_WILD - используется шаблон файловой системы.

=6, DPS_MATCH_SUBNET - < пока нереализовано >.

case_sense

=1, - сравнивать без учёта регистра.

=0, - сравнивать с учётом регистра.

nomatch

=1, - соответствующими данной записи считаются URL, не совпадающие с указаным шаблоном.

=0, - соответствующими данной записи считаются ссылки, совпадающие с шаблоном.

Method

Задаёт действие, которое будет произведено с документами.

=Allow, - документы будут индексироваться, а также сканироваться на наличие новых ссылок.

=Disallow, - документы индекироваться и добавляться в базу не будут, если они уже находятся в базе, то они будут удалены.

=HrefOnly, - документы не будут индексироваться, а будут только просканированы на наличие новых ссылок.

=CheckOnly, - документы будут запрашиваться методом HTTP HEAD, а не HTTP GET, т.е. будет запрошено не содержимое документа, а только краткая информация о нем: размер, дата модификации, Content-Type.

=Skip, - документы будут пропущены при очередной индексации.

=CheckMP3, - документы будут проверяться на наличие тэгов MP3 несмотря на наличие Content-Type, отличного от audio/mpeg.

=CheckMP3Only, - аналогично CheckMP3, однако при отсутствии тэгов MP3 indexer не будет запускать внутренний или внешний парсер, предусмотренный для полученного Content-Type.

=TagIf, - документы будут помечены заданым тэгом.

=CategoryIf, - документы будут помечены заданой категорией.

=IndexIf, - документы будут проиндексированы, если указаная секция подпадает под заданый шаблон.

=NoIndexIf, - документы индексироваться и добавляться в базу не будут, если указаная секция подпадает под заданый шаблон.

Section

Имя секции, используемой для сравнения с шаблоном для методов IndexIf и NoIndexIf.


Приложение A. Помощь проекту

Если вам наравится DataparkSearch Engine и вы хотите поддержать его дальнейшее развитие, пожалуйста, окажите материальную поддержку проекту через Kagi или через PayPal. Любая сумма будет с благодарностью принята.


Предметный указатель

Акценты над буквами
нечувствительный поиск, Поиск без учёта акцентов над буквами
Акронимы и аббревиатуры, Акронимы и аббревиатуры
Алгоритм Построения Рефератов, Алгоритм Построения Рефератов (SEA)
Авторы, Авторы
Баги
сообщение о, Сообщение о багах
Булев поиск, Булев поиск
Булевы запросы
релевантность, Булевы запросы
Документ
цитаты, Цитаты документов
реферат, Алгоритм Построения Рефератов (SEA)
Где взять DataparkSearch, Где взять DataparkSearch
Индексирование вывода программ, Индексирование вывода программ (виртуальные схемы URL exec: и cgi:)
Инсталяция
шаги, Инсталяция DataparkSearch
К вопросу производительности, К вопросу производительности DataparkSearch
Категории, Категории
Клоны документов, Клоны документов
Кодировки, Кодировки
Команда
AccentExtensions, Поиск без учёта акцентов над буквами
Acronym, Акронимы и аббревиатуры
ActionSQL, Сбор данных
AddType, Установка парсеров, Команда AddType
Affix, Использование Ispell
Alias, Команда Alias (из indexer.conf) , Алиасы в search.htm , Секция Variables
AliasProg, Команда AliasProg
Allow, Команда Allow
AllowIf, Команда AllowIf
AuthBasic, Статистика базы данных , Команда AuthBasic
Bind, Команда Bind
BodyBrackets, Шаблоны для индексирования
BodyPattern, Шаблоны для индексирования
BrowserCharset, Секция Variables
Cache, Кэширование результатов поиска, Секция Variables
CacheLogDels, Структура индексов слов при способе хранения Cache
CacheLogWords, Структура индексов слов при способе хранения Cache
Category, Команда Category
CategoryIf, Команда CategoryIf
CategoryTable, Загрузка таблицы категорий
CharsToEscape, Команда CharsToEscape
CheckInsertSQL, Команда CheckInsertSQL
CheckMp3, Команда CheckMp3
CheckMp3Only, Команда CheckMp3Only
CheckOnly, Команда CheckOnly
ColdVar, К вопросу производительности DataparkSearch
CollectLinks, Рейтинг популярности
Cookies, Команда Cookies
CrawlDelay, Команда CrawlDelay
CrossWords, Crosswords
CrossWordsSkipSameSite, Crosswords
DataparkSearchdConf, Модуль mod_dpsearch для Apache httpd
DataparkSearchTemplate, Модуль mod_dpsearch для Apache httpd
DataparkStoredocTemplate, Модуль mod_dpsearch для Apache httpd
DateFormat, Секция Variables
DBAddr, Команда DBAddr
DeleteOlder, Команда DeleteOlder
DetectClones, Команда DetectClones, Секция Variables
DisableRelNoFollow, Ссылки
Disallow, Команда Disallow
DisallowIf, Команда DisallowIf
DocTimeOut, Команда DocTimeOut
DoExcerpt, Цитаты документов
DoStore, Хранение сжатых копий документов
ExcerptMark, Цитаты документов
ExcerptPadding, Цитаты документов
ExcerptSize, Цитаты документов
ExpireAt, Команда ExpireAt
FastHrefCheck, Команда FastHrefCheck
FillDictionary, Команда FillDictionary.
FlushCategoryTable, Команда FlushCategoryTable
FlushServerTable, Команда FlushServerTable
GroupBySite, Секция Variables
GuesserBytes, Автоматическое распознавание кодировки
GuesserUseMeta, Определение кодировки документа
HlBeg, Использование stored при поиске, Секция Variables
HlEnd, Использование stored при поиске, Секция Variables
HoldBadHrefs, Команда HoldBadHrefs
HoldCache, Кэш результатов поиска
HrefOnly, Команда HrefOnly
HrefSection, Команда HrefSection
HTDBAddr, HTDB команды в indexer.conf
HTDBDoc, HTDB команды в indexer.conf
HTDBLimit, HTDB команды в indexer.conf
HTDBList, HTDB команды в indexer.conf
HTDBText, HTDB команды в indexer.conf
HTTPHeader, Команда HTTPHeader
Include, Команда Include
Index, Команда Index
IndexDocSizeLimit, Команда IndexDocSizeLimit
IndexIf, Команда IndexIf
LangMap, Автоматическое распознавание кодировки
LangMapFile, Команда LangMapFile
LangMapUpdate, Автоматическое распознавание кодировки
Limit, Использование лимитов при поиске
Listen, Конфигурирование stored
LMDSection, Команда LMDSection
LoadChineseList, Сегментер фраз китайского языка
LoadKoreanList, Сегментер фраз корейского языка
LoadThaiList, Сегментер фраз тайского языка
LocalCharset, Перекодировка во время индексации, Команда LocalCharset, Секция Variables
Locale, Секция Variables
Log2stderr, Секция Variables
LogLevel, Использование syslog
LogsOnly, Запуск способа хранения cache
LongestTextItems, Команда LongestTextItems
MakePrefixes, Команда MakePrefixes, Секция Variables
MarkForIndex, Команда MarkForIndex
MaxClients, Запуск searchd
MaxCrawlDelay, Команда MaxCrawlDelay
MaxDepth, Команда MaxDepth
MaxDocSize, Команда MaxDocSize
MaxDocsPerServer, Команда MaxDocsPerServer
MaxHops, Команда MaxHops
MaxHrefsPerServer, Команда MaxHrefsPerServer
MaxNetErrors, Команда MaxNetErrors
MaxSiteLevel, Секция Variables
MaxWordLength, Команды указания длины слова
Mime, Установка парсеров
MinDocSize, Команда MinDocSize
MinWordLength, Команды указания длины слова
MirrorHeadersRoot, Зеркалирование
MirrorPeriod, Зеркалирование
MirrorRoot, Зеркалирование
NetErrorDelayTime, Команда NetErrorDelayTime
NewsExtensions, Команда NewsExtensions, Расширенные возможности индексирования новостей
NoIndexIf, Команда NoIndexIf
NoStore, Хранение сжатых копий документов
NumSections, Расчёт релевантности
OptimizeAtUpdate, Команда OptimizeAtUpdate
OptimizeInterval, Конфигурирование stored
OptimizeRatio, Конфигурирование stored
PagesInGroup, Секция Variables
ParserTimeOut, Воизбежание зависания парсера при выполнении
Period, Запуск indexer, Команда Period
PeriodByHops, Команда PeriodByHops
PopRankFeedBack, Метод расчёта популярности Goo
PopRankMethod, Рейтинг популярности
PopRankNeoIterations, Рейтинг популярности
PopRankPostpone, Рейтинг популярности
PopRankShowCntRatio, Метод расчёта популярности Goo
PopRankShowCntWeight, Метод расчёта популярности Goo
PopRankSkipSameSite, Рейтинг популярности
PopRankUseShowCnt, Метод расчёта популярности Goo
PopRankUseTracking, Метод расчёта популярности Goo
PreloadLimit, Запуск searchd
PreloadURLData, Запуск searchd
ProvideReferer, Команда ProvideReferer
Proxy, Команда Proxy
ProxyAuthBasic, Команда ProxyAuthBasic
Quffix, Модификация слов поисковых запросов
R*, Секция Variables
ReadTimeOut, Команда ReadTimeOut
Realm, Команда Realm
RealmDB, Команды ServerDB, RealmDB, SubnetDB и URLDB
RealmFile, Команды ServerFile, RealmFile, SubnetFile и URLFile
RemoteCharset, Кодировка документов по-умолчанию, Команда RemoteCharset
ResegmentChinese, Сегментеры фраз японского, тайского, корейского и китайского языков
ResegmentJapanese, Сегментеры фраз японского, тайского, корейского и китайского языков
ResegmentKorean, Сегментеры фраз японского, тайского, корейского и китайского языков
ResegmentThai, Сегментеры фраз японского, тайского, корейского и китайского языков
ResultContentType, Секция Variables
ResultsLimit, Секция Variables
ReverseAlias, Команда ReverseAlias
ReverseAliasProg, Команда ReverseAliasProg
Robots, Команда Robots
RobotsPeriod, Команда RobotsPeriod
SEASections, Алгоритм Построения Рефератов (SEA)
SEASentenceMinLength, Алгоритм Построения Рефератов (SEA)
SEASentences, Алгоритм Построения Рефератов (SEA)
Section, Команда Section
Server, Команда Server
ServerDB, Команды ServerDB, RealmDB, SubnetDB и URLDB
ServerFile, Команды ServerFile, RealmFile, SubnetFile и URLFile
ServerTable, ServerTable
ServerWeight, Команда ServerWeight, Метод расчёта популярности Goo
SkipHrefIn, Ссылки
SkipUnreferred, Команда SkipUnreferred
Spell, Использование Ispell
SRVInfoSQL, Команда SRVInfoSQL
StopwordFile, Команда StopwordFile
StopwordsLoose, Команда StopwordsLoose.
Store, Хранение сжатых копий документов
StoredFiles, Конфигурирование stored
SubDocCnt, Sub-documents
SubDocLevel, Sub-documents
Subnet, Команда Subnet
SubnetDB, Команды ServerDB, RealmDB, SubnetDB и URLDB
SubnetFile, Команды ServerFile, RealmFile, SubnetFile и URLFile
Synonym, Секция Variables , Синонимы
SyslogFacility, Команда SyslogFacility
Tag, Тэги , Команда Tag
TagIf, Команда TagIf
TrackDBAddr, Регистрация поисковых запросов
TrackHops, Команда TrackHops
TZ, Секция Variables
URL, Команда URL
URLCharset, Команда URLCharset
URLDataFiles, Структура индексов слов при способе хранения Cache
URLDB, Команды ServerDB, RealmDB, SubnetDB и URLDB
URLDumpCacheSize, Команда URLDumpCacheSize
URLFile, Команды ServerFile, RealmFile, SubnetFile и URLFile
URLInfoSQL, Команда URLInfoSQL
URLSelectCacheSize, Команда URLSelectCacheSize
UseCRC32URLId, Команда UseCRC32URLId
UseDateHeader, Команда UseDateHeader
UseRemoteContentType, Команда UseRemoteContentType
VarDir, Команда VarDir, Конфигурирование stored, Секция Variables
VaryLang, Поддержка мультиязычных веб серверов
WrdFiles, Структура индексов слов при способе хранения Cache
Кэш результатов поиска, Кэш результатов поиска
Многоязычность, Создание многоязычных страниц поиска
Отказ от ответственности и гарантий, Отказ от ответственности и гарантий
Очистка базы данных, Как очистить базу данных
Параллельное индексирование, Параллельное индексирование
Параметр method
Allow, Указание веб-пространства для индексирования
CheckMP3, Указание веб-пространства для индексирования
CheckMP3Only, Указание веб-пространства для индексирования
CheckOnly, Указание веб-пространства для индексирования
Disallow, Указание веб-пространства для индексирования
HrefOnly, Указание веб-пространства для индексирования
Skip, Указание веб-пространства для индексирования
Параметры поиска, Параметры поиска
Парсеры, Внешние парсеры
сторонние, Некоторые внешние парсеры
Кодировки, Кодировки и парсеры
Переменная шаблона
$(Body), Секция RES
$(BrowserCharset), Секция RES
$(CL), Секция RES
$(Content-Length), Секция RES
$(Content-Type), Секция RES
$(DY), Секция RES
$(E), Секция error
$(FancySize), Секция RES
$(first), Секция RESTOP
$(grand_total), Секция RESTOP
$(last), Секция RESTOP
$(Last-Modified), Секция RES
$(meta.description), Секция RES
$(meta.keywords), Секция RES
$(ndocs), Секция RESTOP
$(Order), Секция RES
$(PerSite), Секция RES
$(Pos), Секция RES
$(Score), Секция RES
$(sea), Алгоритм Построения Рефератов (SEA)
$(SearchTime), Секция RESTOP
$(Title), Секция RES
$(total), Секция RESTOP
$(URL), Секция RES
$(W), Секция RESTOP
$(WE), Секция RESTOP
$(WS), Секция RESTOP
Помощники, Помощники
Помощь проекту, Помощь проекту
Проверка ссылок, Проверка ссылок
Расширенные возможности индексирования новостей, Расширенные возможности индексирования новостей
Регистрация поисковых запросов, Регистрация поисковых запросов
Рейтинг популярности, Рейтинг популярности
Релевантность, Релевантность
Сбор данных, Сбор данных
Сегментер фраз
китайского языка, Сегментер фраз китайского языка
корейского языка, Сегментер фраз корейского языка
японского языка, Сегментер фраз японского языка
тайского языка, Сегментер фраз тайского языка
Секция шаблона
BETWEENRES, Секция BETWEENRES
BOTTON, Секция BOTTOM
CLONE, Секция CLONE
error, Секция error
navbar0, Секция navbar0
navbar1, Секция navbar1
navright, navright_nop, Секции navright, navright_nop section
noquery, Секция noquery
notfound, Секция notfound
RES, Секция RES
RESBOT, Секция RESBOT
RESTOP, Секция RESTOP
TOP, Секция TOP
Variables, Секция Variables
Синонимы, Синонимы
Создание SQL-таблиц, Создание SQL-таблиц
Способы хранения
cache, Способ хранения Cache
crc, Способ хранения crc
crc-multi, Способ хранения crc-multi
multi, Способ хранения multi
single, Способ хранения single
Стандарт исключений для роботов, Стандарт исключений для роботов
Статистика базы данных, Статистика базы данных
Стопслова, Стопслова
формат файла, Формат файла стопслов
Структура таблиц базы данных, Структура таблиц базы данных
Тэги, Тэги
Удаление SQL-таблиц, Удаление SQL-таблиц
Установка
требования, Установка
возможные проблемы, Возможные проблемы установки
Возможности, Возможности DataparkSearch
Введение, Введение
Зеркалирование, Зеркалирование
Шаблон, Как создавать шаблоны результатов поиска
Шаблоны
секции, Секции шаблона
Aspell, Aspell
Changelog, Введение
Content-Encoding, Поддержка Content-Encoding
Crosswords, Crosswords
DMALLOC, Инсталяция DataparkSearch
dpconv, Создание собственных карт языков
dpguesser, Создание собственных карт языков
DPS_URL переменная окружения, Переменная окружения DPS_URL
HTDB
индексирование таблиц SQL баз данных, Индексирование таблиц SQL баз данных (виртуальная URL схема htdb:)
переменные, Переменные HTDB
Ispell, Ispell
libdpsearch, Использование библиотеки libdpsearch
libextractor, Библиотека libextractor
META
Content-Type, META-тэги
Description, META-тэги
DP.PopRank, META-тэги
Keywords, META-тэги
Refresh, META-тэги
Robots, META-тэги
META-тэги, META-тэги
mod_dpsearch, Модуль mod_dpsearch для Apache httpd
Oracle
notes, Oracle notes
Robots exclustion standard
meta tags, Стандарт исключений для роботов
robots.txt, Стандарт исключений для роботов
Crawl-Delay, Стандарт исключений для роботов
Host, Стандарт исключений для роботов
SEA
Алгоритм Построения Рефератов, Алгоритм Построения Рефератов (SEA)
searchd, Поддержка SearchD
stored, Хранение сжатых копий документов
Syslog, Использование syslog
Tag-парсер, Tag-парсер
Twitter, Введение