Copyright © 2013-2015 Максим Захаров
Copyright © 2003-2012 ООО "ДатаПарк" (DataPark Ltd.)
Copyright © 2001-2003 Lavtech.com corp.
server
srvinfo
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.
Основные возможности 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).
Последняя версия 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
Эта программа является свободным программным обеспечением; вы пожете распространять или модифицировать её в соответствии с условиями Общей публичной лицензии 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
Maxim Zakharov
<maxime@maxime.net.ru>
, домашняя страница
Michael Kynast <kynast@newslookup.com>
:
Первый пользователь DataparkSearch. Тестирование на Linux Red Hat.
Jean-Gerard Pailloncy: Тестирование на OpenBSD.
Amit Joshi: Тестирование на CentOS, пэкадж для Debian, идею по улучшению работы на нескольких PC и с несколькими DBAddr.
mnoGoSearch разработчики и помощники
<devel@mnogosearch.org>
: Разработка и помощь в разработке mnoGoSearch до версии 3.2.15.
Если вы хотите скомпилировать 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.
Мы используем 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.
Для компиляции и установки 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 для сборки вайлов дистрибуции:
В зависимости от ваших предпочтений вам необходимо установить соответсвующий пакет разработчика, или все эти пакеты, если вам нужна поддержка всех этих SQL-серверов:
Разархивируйте дистрибутив и перейдите а корневую директорию распакованного дерева исходников.
tar -xyf dpsearch-x.x.tar.bz2
Для упрощения процесса конфигурирования мы добавили скрипт конфигурации 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>.
Скомпилируйте и установите DataparkSearch.
sh$ make
sh$ make install
Если у вас возникли трудности с компиляцией, пожалуйста, смотрите Разд. 2.5>.
Создайте базу данных search (только для SQL баз данных).
Вы можете использовать существующую базу данных, в этом случае пропустите этот пункт.
MySQL:
sh$ mysqladmin create search
PostgreSQL:
sh$ createdb search
Для других баз данных см. документацию на соответствующую базу данных.
Создайте файлы конфигурации.
Для этого в директории конфигурационных файлов ( по умолчанию это /usr/local/dpsearch/etc/) скопируйте indexer.conf-dist в indexer.conf и search.htm-dist в search.htm. Затем отредактируйте indexer.conf и search.htm согласно вашим потребностям. В основном вам необходимо только отредактировать команду DBAddr в обоих файлах указав соединение с SQL-сервером и необходимый dbmode.
Создайте sql-таблицы
Выполните команду:
sh$ indexer -Ecreate
indexer автоматически создаст все нужные таблицы согласно dbmode, указанному в indexer.conf.
Установка программы поиска
Скопируйте search.cgi в cgi-bin директорию вашего веб-сервера или создайте алиас в Apache на поддиректорию bin/ DataparkSearch.
Каждый раз, когда вы запускаете 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
Если информация выше не помогла вам, пожалуйста, отправьте описание вашей проблемы на список рассылки
<dataparksearch@yahoogroups.com>
(пожалуйста, при возможности пишите на английском).
Вы можете создать дистрибутив исполняемых модулей для вашей системы (tar.bz2 архив, пакет Debian или пакет RPM). Для создания дистрибутива исполняемых модулей используйте команду make bin-dist для создания tar.bz2 архива, или команду make pkg-deb для создания Debian пакета, или команду make pkg-rpm для создания пакета RPM. Пожалуста, имейте в виду, что при создании паета RPM сначала создаётся Debian пакет, который затем конвертируется в формат RPM при помощи утилиты alien.
Перед первым запуском indexer, вам необходимо указать пространство индексирования (см. Разд. 3.6>). В простом случае, когда вам необходимо индексировать один сайт, необходимо добавить команду Server, аналогичную указанной ниже в ваш файл конфигурации indexer.conf:
Server http://www.server.ext/
Запустите indexer для индексирования ваших данных и записи информации об URL:
sh$ /usr/local/dpsearch/sbin/indexer -W
Сначала необходимо сконфигурировать 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> для подробного описания.
Просто запускайте 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: ответа сервера.
Для создание SQL-таблиц, необходимых для работы DataparkSearch, используйте indexer -Ecreate. При запуске с таким аргументом, indexer ищет файл, содержащий SQL-выражения, необходимые для создания всех таблиц, учитывая тип базы данных и режим хранения, указанные в команде DBAddr в indexer.conf. Поиск файлов производится в каталоге /share инсталляции DataparkSearch, т.е. обычно в /usr/local/dpsearch/share/.
Для удаления SQL-таблиц, созданных DataparkSearch, используйте indexer -Edrop. Поиск файл с запросами для удаления таблиц производится в каталоге /share инсталляции DataparkSearch.
indexer имеет ключи -t, -g, -u, -s, -y
для ограничения работы только с чатью базы ссылок.
-t
соответсвует ограничению по тэгу,
-g
соответсвует ограничению по категории,
-u
- ограничение по части URL (поддерживаются шаблоны SQL LIKE с символами % и _),
-s
- ограничение по HTTP статусу документа,
-y
- ограничения по Content-Type.
Все ограничения для одного и того же ключа объединяются опрератором ИЛИ, а группы разных ключей - оператором И.
Чтобы очистить всю базу данных, используйте команду indexer
-C. Вы можете также удалить тольеко часть базы, используя ключи указания подсекций
-t,-g,-u,-s,-y
.
Если Вы запустите 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.
Будучи запущенным с ключом -I
,
indexer показывает пары URL и страница, ссылающаяся на него.
Это полезно для поиска битых ссылок на Ваших страницах.
Вы также можете использовать ключи ограничений подсекций для этого режима.
Например, indexer -I -s 404 покажет адреса всех ненайденных ('Not found') документов
вместе с адресами страницами, содержащими ссылки на эти документы.
Таким образом Вы можете использовать DataparkSearch для проверки ссылок на Вашем сайте.
Возможно запускать одновременно несколько indexer с одним и тем же файлом конфигурации indexer.conf. Мы успешно опробовали 30 одновременно работающих indexer использующих базу данных MySQL. По умолчанию, indexer помечает документы, выбранные к индексированию, как устаревающие через 4 часа в будущем для избежания двойного индексирования одних и тех же документов разными одновременно работающими indexer. Однако это не дает 100% гарантии избежания повторного индексирования. Вы можете использовать многопоточную версию indexer c любым SQL сервером, поддерживающим параллельные соединения с базой. Многопоточная версия использует свой собственный механизм блокировки.
Не рекомендуется использовать одну и ту же базу с различными файлами конфигурации indexer.conf! Один процесс может добавлять некоторые документы в базу, в то время как другой - удалять эти же документы, и оба могут работать без остановки.
С другой стороны, Вы можете запускать несколько indexer c различными файлами конфигурации и различными базами для любого поддерживаемого SQL сервера.
В этом разделе описана реакция DataparkSearch на разные коды HTTP-ответа. Для описания использован псевдо-язык.
200 OK
Если указан ключ -m ("force reindex"), то переход к 4.
Сравнение новой и старой, сохраненной в БД, контрольных сумм документа
Если контрольные суммы равны, то next_index_time=Now()+Period, переход к 7
Разбор документа, создание списка слов, добавление в БД новых гипертекстовых ссылок
Удаление старого списка слов и секций из БД
Вставка нового списка слов и секций
Конец
304 Not Modified
next_index_time=now()+Period
Конец
301 Moved Permanently
302 Moved Temporarily
303 See Other
Удаление слов данного документа из БД
next_index_time=Now()+Period
Добавление в БД URL из заголовка Location:
Конец
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
Удаление из БД слов документа
next_index_time=Now()+Period
Конец
503 Service Unavailable
504 Gateway Timeout
next_index_time=Now()+Period
Конец
Поисковый движок 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
Используете этот ключ совместно с другими нужными вам ключами.
Стопслова -- наиболее часто используемые слова, т.е слова, встречающиеся почти в каждом документе коллекции. Стопслова удаляются перед созданием индекса, что посзволяет сократить размер индекса без сколько-нибудь значимой потери в качестве поиска.
Загружает стоп-слова из указаного файла. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд StopwordFile.
StopwordFile stopwords/en.sl
Вы должны использовать один и тот же надор команд StopwordFile в indexer.conf и search.htm (searchd.conf если используется searchd).
Вы можете создавать свои файлы стоп-слов. В качестве примера, вы можете использовать файл английских стоп-слов 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:. Регулярные выражения в данный момент ограничены (например, не поддерживаются интервалы).
При помощи команды "FillDictionary yes" в indexer.conf вы можете включить сохранение всех индексируемых слов в таблице "dict" для способа хранения cache. Это может пригодиться для отслеживания, какие слова могут быть стопсловами для вашей инсталляции.
Если в indexer.conf и в search.htm указана команада "StopwordsLoose yes", только стопслова того же языка, что и индексируемый документ или языка поискового запроса считаются таковыми, т.е. стопслова для других языков обрабатываются как обычные слова для текущего индексируемого документа или исполняемого поискового запроса.
Клоны -- документы, имеющие одинаковые значения Hash32 вычисляемой по всем секциям документа. Копии одного и того же документа имеют одинаковые значения Hash32. Это позволяет не индексировать дубликады документов в коллекции. Однако: всли в файле sections.conf определена только секция title, тогда все документы с разными телами, но одинаковыми title будут считаться клонами.
DetectClones yes/no
Включает или выключает механихм определения и игнорирования "клонов" документов. При включении, indexer будет определять копии документов, расположенных, например, на зеркалах, и не индексировать их повторно. Значение по умолчанию: yes.
DetectClones no
Каждый раз когда 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.
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
Server site
Описывает все документы с того же самого сервера, что и аргумент команды Server. Например, Server site http://localhost/path/to/a.html описывает любой документ с сервера http://localhost/.
Server world
Если в качестве значения параметра subsection
каманды
Server задано word, то это описывает
абсолютно любой документ. См. объяснение ниже.
Server page
При этом значении параметра subsection
только URL,
указанный в качестве параметра команды Server,
соответствует этой команде.
Server nofollow
Не идти по ссылкам для любого URL, подпадающего под указаный шаблон.
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.
Параметр Allow означает, что документы, соответствующие его команде, будут индексироваться, а также сканироваться на наличие новых ссылок. В зависимости от полученного Content-Type, будет зупущен соответствующий внутренний или внешний парсер, а полученные в результате слова будут помещены в индекс для поиска.
Параметр Disallow означает, что ссылки, соответствующие его команде, и появляющиеся по мере индексации, будут игнорироваться, т.е. не будут добавляться в базу данных. Те же документы, которые уже были в базе данных, и соответствующие команде, будут удаляться в момент из очередной индексации.
Параметр HrefOnly означает, что документы, соответствующие его команде, не будут индексироваться, а будут только просканированы на наличие новых ссылок. Это, например, полезно при просмотре RSS-фидов для обнаружения новых документов сайта. Используйте этот параметр для описания страниц, содержащих не сами сообщения, а списки сообщений со ссылками на них. Например:
Server HrefOnly Page http://www.site.ext/feed.xml Server Allow Path http://www.site.ext/
Параметр 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 затем поможет увидеть все ли внутренние и внешние ссылки верны.
Параметр Skip означает, что документы, соответствующие его команде, будут пропущены при очередной индексации, и indexer вернётся к ним снова по прошествии периода устаревания документов. Иначе говоря, эти документы будут просто помечены как неустаревшие, и при этом не будут загружаться из сети, а текущяя информация о них, уже находящаяся в базе данных, будет оставлена без изменения. Эту команду можно использовать, например, для временной отмены индексации временно недоступного по каким-то причинам сайта.
Параметр CheckMP3 означает, что документы, соответствующие его команде, будут проверяться на наличие тэгов MP3 несмотря на наличие Content-Type, отличного от audio/mpeg. Это полезно, в частности, когда удаленный сервер выдает application/octet-stream в качестве Content-Type для файлов в формате MP3. При наличии MP3 тэгов будет произведена их индексация, а в случае их отсутствия indexer продолжит работу, предусмотренную для полученного Content-Type: запуск внутреннего или внешного парсера.
Этот параметр работает аналогично CheckMP3, однако при отсутствии тэгов MP3 indexer не будет запускать внутренний или внешний парсер, предусмотренный для полученного Content-Type.
Это основная команда в файле indexer.conf.
Она используется для описания веб-пространства для индексирования в виде серверов
и их частей, а также добавляет заданый URL, указанный в качестве обязательного параметра
pattern
в базу при старте indexer
для использования его в качестве стартовой точки.
Например, команда Server http://localhost/ разрешает индексировать документы сервера http://localhost/. Также, indexer вставляет документ с адресом http://localhost/ в базу данных.
Вы также можете задать некоторый подкаталог для индексирования только части сервера: Server http://localhost/subsection/. И эта команда также добавляет аргумент в базу данных для использования его в качестве стартовой точки индексирования.
Замечание: Вы можете заставить indexer не добавлять в базу URL, указанные в командах Server, задав в командной строке ключ
-q
. Это полезно, когда у вас несколько сотен или тысяч команд Server, а соответсвующие им URL уже добавлены в базу, в частности, это ускоряет запуск indexer.
Команда Realm обладает более гибкими возможностями указания веб-пространства для индексирования. Эта команда работает почти также как и команда Server, однако отличается от нее тем, что:
получает в качестве аргумента не адрес сервера или его подкаталога, а шаблон адресов.
не добавляет аргумент в качестве стартовой точки для индексирования, поскольку аргумент не является правильным адресом, а шаблоном.
Команда 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.*.*.*
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.
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.
URL http://localhost/path/to/page.html
Эта команда добавляет указаный URL в базу. Это полезно когда нужно добавить несколько стартовых точек для одного сервера. Не имеет эффекта, если указываемый URL уже находится в базе.
URLDB pgsql://foo:bar@localhost/portal/links?field=url
Эти команды аналогичны командам Server, Realm, Subnet
и URLсоответственно, но аргументы для вставки в базу выбираются из указанного поля SQL-таблицы.
В примере выше ссылки выбираются из базы portal
, SQL-таблицы links
и поля url
.
URLFile url.lst
Эти команды аналогичны командам Server, Realm, Subnet
и URLсоответственно, но аргументы для вставки в базу выбираются из указанного текстового файла, в котором
каждый аргумент указывается на отдельной строке.
В примере выше ссылки выбираются из текстового файла url.lst
, расположенного в директории
/usr/local/dpsearch/etc. Однако можно указывать и полный путь до файла с аргументами.
DataparkSearch соблюдает стандарт robots.txt. robots.txt - файл, помещаемый в корневую директорию вашего веб сервера, указывающий поисковым машинам, какие страницы вы не хотите индексировать.
DataparkSearch также соблюдает мета тэги: nofollow
, noarchive
и noindex
.
DataparkSearch также поддерживает директивы Crawl-delay
и Host
в robots.txt.
Ниже указаны команды в файле indexer.conf, относящиеся к стандарту исключений для роботов.
Robots yes/no
Разрешает или запрещает использование robots.txt и <META NAME="robots" ...>
для исключения страниц. Используйте no
, например, для проверки ссылок на вашем сайте или сайтах.
Имейте в виду, что игнорирование чужих robots.txt не приветсвуется сетевым этикетом.
Команда действует до конца файла, или до следующей команды Robots.
Значение по умолчанию: yes.
Robots yes
По умолчанию, данные из robots.txt хранятся в SQL-базе одну неделю. Вы можете изменить этот период используя команду RobotsPeriod:
RobotsPeriod <time>См. формат <time> в описании команды Period из Разд. 3.10.28>.
RobotsPeriod 30d
Используйте эту команду для задания периода в секундах между последовательными запросами к одному и тому же серверу. Аналогична команде crawl-delay в файле robots.txt, но может быть задана в indexer.conf файле для каждого сервера в отдельности. Если не задано значение crawl-delay value в robots.txt, используется значение, указаное в CrawlDelay. Если значение crawl-delay указано в robots.txt, тогда используется максимальное значение из CrawlDelay и crawl-delay.
Когда indexer готов индексировать очередной URL с сервера, для которого интервал Crawl-deley с предыдущего обращения к сайту еще не истек, он ожидает, пока этот период не истечет, если период ожидания в секундах меньше значения, указанного командой MaxCrawlDelay. Если период ожидания больше или равен этому значению, выбранный URL откладывается в индексировании на период ожидания.
MaxCrawlDelay 60
Значение по-умолчанию: 300 секунд.
Встроенная в DataparkSearch поддержка алиасов дает возможность индексировать сайты, беря информацию для индексации из альтернативного источника данных. Например, при индексации локального веб-сервера можно выбирать страницы напрямую с жесткого диска без использования веб-сервера и сетевых протоколов. Либо, например, можно для индексации какого-либо сайта использовать не его основной адрес, а его более быстрое зеркало.
Формат команды "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.
Алиасы просматриваются в порядке их появления в 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/ никогда не будет обработан.
Возможно указание расположения данных для выборки индексером используя дополнительный аргумент команды Server:
Server http://home.udm.net/ file:/home/httpd/htdocs/
Алиасы в команде 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
и использует этот результат для получения документа.
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/"
Команда 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 будет тоже вырезан.
ReverseAliasProg - команда, аналогичная обеим командам AliasProg и ReverseAlias. Она получает параметры аналогично команде AliasProg, но преобразовывет URL перед вставкой в базу, аналогично команде ReverseAlias.
Вы также можете использовать алиасы и в 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
DataparkSearch поддерживает команду ServerTable в indexer.conf.
Когда задана команда ServerTable mysql://user:pass@host/dbname/tablename[?srvinfo=infotablename], indexer будет загружать информацию о серверах из указаной SQL таблицы tablename, а параметры этих серверов из таблицы infotablename. Если параметр srvinfo не указан, параметры загружаются из таблицы с именем srvinfo. См. структуру этих таблиц в файле create/mysql/create.txt. Если для вашей базы данных нет соответствующего скрипта со структурой этой таблицы, возьмите этот файл в качестве образца.
Вы можете использовать несколько команд ServerTable для загрузки информации о серверах из различных таблиц.
Таблица серверов содержит поля для описания всех необходимых параметров серверов. Имена полей соответсвуют командам в indexer.conf. Например, поле period соответсвует команде Period в indexer.conf. Значения полей по умолчанию равны значениям по умолчанию соответсвующих параметров из indexer.conf.
Поле gindex соответсвует команде Index. Имя слегка изменено во избежания использования зарезервированного в SQL имени.
Зачения некоторых полей расшифрованы в Разд. 9.3>.
Замечание: Из таблицы серверов считываются только те записи, для которых значение поля active равно 1, а поле значение поля parent равно 0. Это даёт возможность пользователям добавлять новые URL в таблицу серверов, а администраторам - авторизовать добавленные записи.
Сбрасывает server.enabled в неактивное состояние для всех записей таблицы серверов. Используйте эту команду для деактивирования всех команд в таблице серверов перед загрузкой новых из indexer.conf или из другой таблицы серверов.
DataparkSearch indexer может использовать внешние парсеры для различных типов файлов (MIME types).
Парсер - это программа, которая конвертирует один из типов файла (mime type) в text/plain или text/html. Например, если у вас есть PostScript файлы, Вы можете использовать парсер (фильтр) ps2ascii, читающий из stdin PostScript файл и выдающий текст в ascci на stdout.
Indexer поддерживает четыре типа парсеров, такие что:
читают данные из stdin и выдают результат в stdout;
читают данные из файла и выдают результат в stdout;
читают данные из файла и помещают результат в файл;
читают данные из stdin и помещают результат в файл.
Конфигурирование типов файлов (mime types)
Сконфигурируйте Ваш веб-сервер на выдачу соответствующего заголовка Content-Type. Например, для apache, смотрите файл mime.types, большинство типов файлов уже указаны в нём.
Если необходимо индексировать файлы на локальной файловой системе, или используя протокол ftp используйте команду AddType в indexer.conf для привязки типа файла к расширению файлов. Например:
AddType text/html *.html
Добавление строк с определениями парсеров. Эти строки имеюют следующий формат с треми аргументами:
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
Воизбежание подвисания парсера при выполнении Вы можете указать в Вашем файле indexer.conf число времени в секундах, отводимое на работу парсеру, при помощи команды ParserTimeOut. Напрмиер:
ParserTimeOut 600
Значение по умолчанию - 300 секунд, т.е. 5 минут.
Вы можете использовать конвееры в командных строках парсеров. Например, следующие строки необходимы при индексировании загнузипленых страниц man на локальном диске:
AddType application/x-gzipped-man *.1.gz *.2.gz *.3.gz *.4.gz Mime application/x-gzipped-man text/plain "zcat | deroff"
Некоторые парсеры могут выдавать результат в кодировке, отличной от указанной в команда LocalCharset. Указание кодировки парсера даёт возможность indexer перекодировать результат в нужную кодировку. Например, если catdoc сконфигурирован на вывод результата в windows-1251, а в LocalCharset указана кодировка koi8-r, используйте следующую команду для парсера документов MS Word:
Mime application/msword "text/plain; charset=windows-1251" "catdoc -a $1"
При выполнении парсера, indexer создаёт переменную окружения DPS_URL, содержащую URL обрабатываемого документа. Вы можете использовать эту переменную в Ваших скриптах парсеров.
RPM парсер от Mario Lang <lang@zid.tu-graz.ac.at>
/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
indexer.conf:
Mime application/vnd.ms-excel text/html "/usr/local/dpsearch/sbin/xlhtml $1"
ppthtml Конвертор PowerPoint (PPT) в html. Часть проекта xlhtml 0.5.
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"
Пожалуйста, присылайте Ваши скрипты и конфигурации для новых парсеров на адрес
<dataparksearch@datapark.ru>
.
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.
Вы можете включить другой конфигурационный файл в любом месте файла indexer.conf при помощи команды Include <filename>. Путь считается абсолютным, если <filename> начинается с "/":
Include /usr/local/dpsearch/etc/inc1.conf
В противном случае пусть считается относительным:
Include inc1.conf
Команда 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
Вы можете задать альтернативную директорию для данных способа хранения cache и данных stored:
VarDir /usr/local/dpsearch/var
Включает расширенную поддержку групп новостей. Значение по умолчанию no.
NewsExtensions yes
Может быть использована, если Datapark был скомпилировал с поддержкой syslog и вы хотите изменить значение по умолчанию. Задаваемое значение должно быть одним из описаных в файле syslog.conf. См. syslog.conf(5).
SyslogFacility local7
Вы можете указать диапазон длин слов, сохраняемых в базе. По умолчанию, сохраняются слова длиной от 1 до 32 символов.
MinWordLength 1 MaxWordLength 32
Эта команда служит для указания максимального размера документа. Значение по умалчанию: 1048576 (1 Mb). Имеет глобальный эффект.
MaxDocSize 1048576
Данная команда включает режим только проверки наличия (CheckOnly) для документов размером менее указанного. Значение по умолчанию: 0. Имеет глобальный эффект.
MinDocSize 1024
Используйте эту команду для задания максимального размера данных, записываемых в индекс для одного документа. Значение по умолчанию: 0. Это обозначает без ограничений. Команда действует до следующей команды IndexDocSizeLimit.
IndexDocSizeLimit 65536
Задаёт число документов отбираемых для индексации за раз. Значение по умолчанию: 1024.
URLSelectCacheSize 10240
Задаёт число документов отбираемых за раз для записи индексов cache mode, загрузки данных в searchd или для расчёта индекса популярности. Значение по умолчанию: 100000.
URLDumpCacheSize 10240
Включает или выключает генерацию ID для URL используя алгоритм HASH32. Значение по умолчанию: "no".
UseCRC32URLId yes
Вы можете добавить свои собсвенные заголовки в запрос 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"
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
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 \?
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$
HrefOnly [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ]
Значение первый трёх необязательных параметров такое же, как и у команды Allow. Используйте эту команду для поиска ссылок в указанных URL. Содержимое самих файлов не индексируется. Команда имеет глобальный эффект. Например, при индексировании почтовых архивов, индесные страницы (типа mail.10.html, thread.21.html, etc.) будут сканировать для поиска ссылок на страницы с письмами, но не будут индексироваться:
HrefOnly */mail*.html */thread*.html
CheckMp3 [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...]
Значение первый трёх необязательных параметров такое же, как и у команды Allow. Если URL подпадает под эту команду, то indexer скачает небольшую порцию этого документа и попробует найти тэги MP3 в этом фрагменте. При обнаружении, тэги будут проиндексированы. В противном случае, документ будет скачен целиком и обработан в обычном порядке. Замечание: это работает только для серверов, поддерживающих HTTP/1.1, т.е. используется заголовок "Range: bytes".
CheckMp3 *.bin *.mp3
CheckMP3Only [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...]
Эта команда аналогична команде CheckMP3, за исключением: если тэги MP3 не будут обнаружены, документ не скачивается целиком и не обрабатывается.
CheckMP3Only *.bin *.mp3
IndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]
Эта команда служит для разрешения индексирования при совпадении шаблона arg
по заданой секции section
документа.
Значение первых трёх необязательных параметров такое же как и у команды Allow
(см. Разд. 3.10.14>).
Пример
IndexIf regex Title Manual IndexIf body "*important detail*"
NoIndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ]
Эта команда служит для запрещения индексирования при совпадении шаблона arg
по заданой секции section
документа.
Значение первых трёх необязательных параметров такое же как и у команды Allow
(см. Разд. 3.10.14>).
Пример
NoIndexIf regex Title Sex IndexIf body *xxx*
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*"
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*
HoldBadHrefs <time>
Задаёт сколько времени хранить документы с ошибочными кодами статуса перед удалением их из базы. Например, если какой-либо веб-сервер временно недоступен, indexer не удалит страницы этого сервера сразу. Однако, если этот сайт будет недоступен продолжительное время, страницы с этого сайта будут удалены по истечении указаного интервала времени. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.28>.
HoldBadHrefs 30d
DeleteOlder <time>
Задаёт сколько времени хранить проиндексированные документы в базе. Например, при индексировании новостных сайтов, вы можете задать период, по истечении которого устаревшие страницы новостей будут удалены из базы, независимо от статуса этих документов. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.28>. Значение по умолчанию: 0, - означает "не проверять". Вы можете указать несколько команд DeleteOlder, например, по одной для каждой команды Server.
DeleteOlder 7d
UseRemoteContentType yes/no
Данная команда указывает брать ли тип содержимого из заголовков ответа сервера (yes) или определять его на основании комманд AddType, указанных в файле конфигурации (no). Если задано 'no' и по заданым командам AddType определить тип не удаётся, то используется тип из заголовков ответа сервера. Значение по умолчанию: yes.
UseRemoteContentType yes
AddType [String|Regex] [Case|NoCase] <mime type> <arg> [<arg>...]
Эта команда ассоциирует MIME тип с указаным расширением файла. Эти команды используются при индексировании ссылок со схемой file://. Первые два необязательных параметра используются для задания типа сравнения. По умолчанию используются "String" "NoCase" (нечувствительное к регистру стравнение строк с использованием символов-шаблонов '?' и '*').
AddType image/x-xpixmap *.xpm
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
PeriodByHops <hops> [ <time> ]
Задаёт период переиндексирования для страниц зо значением глубины в "мышиных кликах" равным <hops>. Формат для <time> такой же как и для команды Period.
Можно задавать несоклько команд PeriodByHops, например по одной на каждую команду Server. Если параметр <time> опущен, действие указаного ранее значения отменяется.
Если для конретного значения <hops> не задан период переиндексирования командой PeriodByHops, в этом случае используется значение, заданное командой Period.
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.
UseDateHeader yes|no|force
Использовать ли заголовок ответа сервера Date если в ответе сервера не содержится заголовок Last-Modified. Если указано значение force, то заголовок Date используется даже если сервер отправляет заголовок Last-Modified. Значение по-умолчанию: no.
LMDSection <section name>
Эта команда задают секцию документа, которая будет использоваться в качестве даты последней модификации документа вместо HTTP-заголовка Last-Modified, отдаваемого удаленным сервером. Может задаваться неоднократно перед каждой командой Server и последнее установленное значение имеет эффект до конца файла конфигурации или до следующей команды LMDSection. Значение по умолчанию не определено. Используйте эту команду без какого-либо аргумента, чтобы вернуться к значению по умолчанию. Если значение заданной этой командой секции не определено, будет использоваться значение HTTP-заголовка Last-Modified.
MaxHops <number>
Максимальная глубина пути в "мышиных кликах" от начального URL. Значение по умолчанию: 256. Может быть задано несколько команд MaxHops, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHops.
MaxHops 256
TrackHops yes|no
Включает или выключает ведение счётчика hops при переиндексировании. Значение по умолчанию: no (выключено). Если включено, то при переиндексировании значение hops для url вычисляется заново, иначе значение hops вычисляется один раз при помещении url в базу.
TrackHops yes
MaxDepth <number>
Максимальная глубина директории в url. Значение по умолчанию 16. Может быть задано несколько команд MaxDepth, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDepth.
MaxDepth 2
MaxDocsPerServer <number>
Ограничивает число документов, выкачиваемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет проиндексировано не более указанного числа документов, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxDocsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDocsPerServer.
MaxDocsPerServer 100
MaxHrefsPerServer <number>
Ограничивает число ссылок, собираемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет собирать не более указанного числа ссылок, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxHrefsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHrefsPerServer.
MaxHrefsPerServer 100
MaxNetErrors <number>
Задаёт максимальное число сетевых ошибок для каждого сервера. Значение по умолчанию: 16. Используйте значение 0 для выключения проверки. Если число ошибок при обращении к какому-то серверу превысит заданое число (например, хост временно не доступен), indexer больше небудет пытаться получить документы с этого сервера. Команда действует до конца файла конфигурации, или до следующей команды MaxNetErrors.
MaxNetErrors 16
ReadTimeOut <time>
Таймаут ожидания соединения или продолжения получения данных.
Формат <time>
см. Разд. 3.10.28>.
Значение по умолчанию: 30 секунд.
Команда действует до конца файла, или до следующей команды ReadTimeOut.
ReadTimeOut 30s
DocTimeOut <time>
Указывает максимальное время ожидания получения всего документа.
Формат <time>
см. в Разд. 3.10.28>.
Значение по умолчанию: 90 секунд.
Команда действует до конца файла, или до следующей команды DocTimeOut.
DocTimeOut 1m30s
NetErrorDelayTime <time>
Указывает период, на который будет отложена обработка документа при возникновении сетевых ошибок при его получении.
Формат <time>
см. в Разд. 3.10.28>.
Значение по умолчанию: один день.
NetErrorDelayTime 1d
Cookies yes/no
Включает поддерку ключиков HTTP (HTTP cookies). Команда действует до конца файла, или до следующей команды Cookies. Значение по умолчанию: no.
Cookies yes
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"
HrefSection <string> [ <pattern> <replacement> ]
где <string>
- имя секции,
<pattern>
и <replacement>
- шаблон и замена, аналогичная используемым в regex,
для извления значения секции из тела документа.
Используйте эту команду для извлечения ссылок из тела документа.
# Standard HTML sections: body, title HrefSection link HrefSection NewLink "<newlink>([^<]*)</newlink>" "$1"
Команда "FastHrefCheck yes" полезна для ускорения индексирования, если ваш список команд Server/Realm/Subnet огромен, т.к. она выключает проверку ссылок по списку серверов на этапе парсинга страницы.
Index yes/no
Разрешает или запрещает сохранения проиндексированных слов в базу. Применяется, например, при проверке ссылок на страницах сайта или сайтов. Команда действует до конца файла, или до следующей команды Index. Значение по умолчанию: yes. Prevent indexer from storing words into database.
Index no
ProxyAuthBasic login:passwd
Задаёт имя пользователя и пароль для авторизации http proxy basic или SOCKS5 username. Может быть указана перед каждой командой Server, но действует только для этой команды!. Может также использовать перед командой Proxy. Примеры:
ProxyAuthBasic somebody:something
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
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/
ServerWeight <number>
Задаёт вес Server для расчёта Popularity Rank (см. Разд. 8.5.3>). Значение по умолчанию: 1.
ServerWeight 1
OptimizeAtUpdate yes
Задаёт стратегию оптимизации индекса слов. Значение по умолчанию: no. Если включено, позволяет экономить дисковое пространство, однако замедляет процесс индексирования. Может указываться и в indexer.conf и в cached.conf.
SkipUnreferred yes|no|del
Значение по умолчанию: no. Используйте эту команду для пропуска переиндексации или для удаления документов, на которые никто не ссылается. Для этой команды требуется включить сбор ссылок (см. Разд. 8.5.3>).
Bind 127.0.0.1
Если ваша система имеет несколько сетевых интерфейсов, вы можете используйте эту команду для задания локального ip адреса.
ProvideReferer yes
Используйте эту команду для передачи заголовка запроса Referer: для HTTP и HTTPS соединений.
LongestTextItems 4
Используйте эту команду для указания числа самых длинных текстовых элементов к индексированию.
При помощи команды MakePrefixes yes вы можете указать indexer автоматически создавать префиксы для всех индексируемых слов. В частности, это можно использовать при создании поисковых подсказок.
Для включения расширенных возможностей индексирования новостей необходимо проделать следующее:
Сконфигурировать 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.
DataparkSearch позволяет индексировать текстовые поля SQL баз данных используя так называемую виртуальную URL схему htdb:.
Используя виртуальную URL схему htdb:/ вы можете создать полный индекс текстовых полей вашей SQL базы данных, а также вашего WWW сервера, использующего SQL для хранения информации.
Замечание: Необходимо иметь PRIMARY индекс для таблиц, которые вы собираетесь индексировать.
Для поддержки 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.
Вы можете использовать части пути в 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)'"
Используя схему 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'.
Вы можете также использовать виртуальную схему 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".
DataparkSearch поддерживает виртуальные URL схемы exec: и cgi:, позволяющие запускать внешнюю программу. Эта программа должна выдавать результат своей работы в stdout. Результат должен быть оформлен по стандарту HTTP, т.е. заголовок ответа HTTP, а за ним содержимое документа.
Например, при индексировании обоих cgi:/usr/local/bin/myprog и exec:/usr/local/bin/myprog, indexer будет выполнять программу /usr/local/bin/myprog.
При выполнении программы по виртуальной схеме 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/
indexer не создаёт переменной окружения QUERY_STRING как для схемы cgi:. Он создаёт командную строку с аргументами, указанными в URL после занка ?. Например, при индексировании exec:/usr/local/bin/myprog?a=b&d=e, будет выполнена слудующая команда с параметрами:
/usr/local/bin/myprog "a=b&d=e"
Виртуальную 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"
и получит его вывод для дальнейшей своей работы.
Вы должны указать путь к корневой директории для активации зеркалирования сайтов
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одержит таких больших документов, все будет нормально.
Используя команду 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)"
Все приложения DataparkSearch по-умолчанию используют syslog для протоколирования своих действий, ошибок и прочих сообщений. indexer поддерживает несколько уровней подробности выдачи сообщений, которые могут быть заданы поцией -v или командой LogLevel в файле конфигурации:
Таблица 3-2. уровни подробности сообщений indexer'а
0 | SILENT | Подавить весь вывод |
1 | ERROR | только критические ошибки |
2 | WARNING | предупреждения |
3 | INFO | Сообщения информационного характера. Используется по-умолчанию. |
4 | EXTRA | Дополнительный информационный вывод |
5 | DEBUG | Отладочный вывод |
Параллельно с записью в 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).
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.
Перед использованием 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
После того, как вы сконфигурируете и запустите stored, indexer будет передавать ему проиндексированные документы. А 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 работает следующим образом:
search.htm показывает ссылку на storedoc.cgi;
Когда пользователь кликает по ссылке, storedoc.cgi посылает запрос к демону stored по адресу, указанному в storedoc.htm при помощи параметра stored команды DBAddr;
По этому запросу, stored находит и разжимает запрошенную копию и отправляет ее storedoc.cgi;
storedoc.cgi разбирает полученный документ и выделяет все слова из поискового запроса. Способ выделения указывается в шаблоне storedoc.htm командами HlBeg and HlEnd;
stored также используется для создания цитат документов на основе слов из запроса.
Для задания приблизительного размера цитаты в символах, используйте в search.htm (в секции variables) команду ExcerptSize. Значение, используемое по умолчанию, равно 256.
С помощью команды ExcerptPadding вы можете задать примерное число символов, возвращаемых в цитате перед и после найденного слова запроса; значение по умолчанию: 40.
При помощи команды ExcerptMark вы можете изменить разделяющую последовательность символов, вставляемую между частями цитаты с ключевыми словами; значение по умолчанию: " ... " (пробел, многоточие, пробел).
Вы можете выключить создание цитат (но сохранив возможность показа сохраненных копий) документов указав команду DoExcerpt no в вашем поисковом шаблоне.
Tag-парсер понимает тэги в следующей нотации:
< ... parameter=value ... >
< ... parameter="value" ... >
< ... parameter='value' ... >
indexer понимает следующие специальные символы HTML:
< > & "
Все ссылки на символы, принятые в HTML-4: ä ü и др.
Символы с использованием Unicode: ê
В настоящий момент 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="Robots" Content="xxx">, где Content содержит список из следующий ключевых слов, разделенных запятой: ALL, NONE, INDEX, NOINDEX, FOLLOW, NOFOLLOW, NOARCHIVE.
<META NAME="DP.PopRank" Content="xxx"> где значение Content - вещественное число. Этот тэг используется для задания начального значения PopularityRank для страницы.
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.
Если Вы индексируете свои собственные ресурсы и имеете возможность отредактировать их, то, возможно, для более оптимальной работы индексации и поиска, имеет смысл специальным образом подготовить документы, "спрятав" от робота отдельные их части, такие как меню навигации, и др.
Текст между <!-- .... --> считается 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 --> рассматриваются как тэги для включения/исключения контента из индексирования.
Если вам нужно индексировать не всю страницу целиком, например, чтобы исключить навигацию, рекламу и т.п., вы можете использовать команду BodyPattern чтобы указать шаблон для извлечения контента для индексирования. Например:
BodyPattern "<!--content-->(.*)<!--/content-->" "$1"этот шаблон будут извлекать контент между двумя специальными комментариями, и только этот контен будет проиндексирован для этой страницы.
Вы можете задать несколько команд BodyPattern, но только первая по порядку подходящая будет применена к странице. Эти команды пытаются примениться к каждой индексируемой странице. Осторожно, большое число таких команд может замедлить скорость индексирования.
Команда BodyBrackets аналогична команде BodyPattern, но задает два маркера: начала контента и конца контента, например:
BodyBrackets "<!--B-->" "<!--E-->"При этом фрагмент документа заключенный между <!--B--> и <!--E--> будет считаться телом документа.
Поддокументами являются: содержимое фреймов и внедряемых объектов (как правило, flash-роликов), временные редиректы (зачастую используются для установки кук или перенаправления на страницу в зависимости от языка предпочтений пользователя), версии одного и того же документа на разных языках, отдаваемые с использованием Content nehotiation.
Управление индексированием поддокументов осуществляется двумя командами: команда SubDocLevel задает максимальный уровень вложенности индексируемых поддокументов. Значение по умолчанию равно 0, что запрещает индексирование поддокументов. Команда SubDocCnt задает максимальное число индексируемых поддокументов всех уровней вложенности (эта команда предназначена в основном для предотвращения бесконечных циклов вложенности страниц друг в дуга). Значение по умолчанию равно 5.
DataparkSearch сохраняет в базе каждое найденное на страницах слово вместе с номером секции документа, в которой найдено это слово, а также с номером позиции слова в документе. Число появлений каждого слова в документе не влияет на релевантность. Однако номер секции документа, в которой встречается слово, может влиять на релевантность.
На данный момент 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
Если указан режим хранения "single", все слова сохраняются в одной таблице (или текстовом файле, для втсроенной базы данных) со структурой (url_id,word,weight), где url_id - идентификатор документа, равный значению поля rec_id таблицы "url". Word имеет SQL тип variable char(32).
Если выбран способ хранения "multi", слова будут сохранены в 13 различных таблицах, в зависимости от их длины. Структура этих таблиц идентична структуре таблицы для способа хранения "single", только для Word используется тип char фиксированной длины, что даёт выигрыш в скорости для большинства баз данных. Это делает режим "multi" более быстрым, по сравнению с "single". Этот режим не реализован для встроенной базы данных.
Если выбран способ хранения "crc", DataparkSearch вместо слов будет сохранять их индентификатора, вычесленные как CRC32 сумма от этих слов. Этот режим хранения использует меньше дискового пространства и работает быстрее способов хранения "single" и "multi". Наши тесты показали, что только 250 пар слов из списка в 1.600.000 уникальных слов имеют одинаковую CRC32 сумму. Большая часть этих пар (>90%) содержит по меньшей мере одно слово с ошибкой. Инфоромация о каждом слове хранится в следующей структуре (url_id,word_id,weight), где word_id - 32-битовый идентификатор слова, посчитаный как его CRC32 сумма. Этот режим хранения рекомендуется для больших поисковиков.
Если выбран способ хранения "crc-multi", DataparkSearch хранит CRC32 идентификаторы в нескольких таблицах (или двоичных файлах для встроенной базы данных) с такой же структурой, как и для способа хранения "crc", и в зависимости от лины слова, как при режиме хранения "multi". Обычно это самый быстрый способ и рекомендован для больших поисковиков.
Учтите, что мы разрабатываем DataparkSearch с использованием PostgreSQL в качестве SQL сервера и зачастую не имеем возможности тестировать каждую новую версию со всеми поддерживаемыми базами данных. Т.е., если для вашей базы данных нет соответсвующей структуры таблиц в директории create/you_database, возьмите в качестве образца структуру для PostgreSQL и создайте по аналогии структуру для вашей базы данных. Структура для PostgreSQL всегда поддерживается в обновлённом состоянии.
Режимы хранения single и multi поддерживают поиск подстрок. Т.к. при использовании режимов хранения crc и crc-multi хранятся не слова сами по себе, а только их CRC-идентификаторы, то осуществить поиск подстрок не представляется возможным.
В DataparkSearch реализован способ хранения 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-битных систем
При выборе способа хранения cache используются две дополнительные программы: cached и splitter.
cached - демон, получающий по сети информацию о хранимых словах от indexer и записывает её на ваш жёсткий диск. Этот демон может работать в двух режимах, как старый демон cachelogd, входивший в предыдущие версии и только записывающий получаемую информацию на диск, и в новом режиме, в котором объединены функции cachelogd и splitter.
splitter - программа создания индексов слов для быстрого поиска на основе записей, сделаных cached при работе в старом режиме. Эти индексы слов и используются в дальнейшем при обработке запросов на поиск.
Для запуска режима хранения cache проделайте следующее:
Запустите демон 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
Сконфигурируйте indexer.conf как обычно, указав cache в качестве параметра dbmode команды DBAddr и localhost:7000 в качестве параметра cached (см. Разд. 3.10.2>).
Запустите один или несколько indexer. Несколько indexer могут быть запущены одновременно. Вы можете запускать indexer с различных машин, но работающих с одним сервером cached. Это позволяет проводить ускоренное распределенное индексирование.
Сброс буферов cached и данных об url, а также создание лимитов по завершении процесса индексирования. Пошлите сигнал -HUP для cached. Вы можете использовать файл cached.pid для этого:
kill -HUP `cat /usr/local/dpsearch/var/cached.pid`
Дождитесь окончания сброса буферов, прежде чем переходить к следующему шагу.
Создание индекса слов. Этот шаг не требуется, если cached запущен в новом, объединённом, режиме. Когда соберётся достаточное количество информации в поддиреткории /var/splitter/, можно создать индексы для быстрого поиска слов.Программа splitter предназначена для этого. Она устанавливается в поддиректорию /sbin. Индексы для поиска слов могут создаваться в любое время без остановки процесса индексирования.
Создание индекса слов. Запустите splitter без каких либо ключей: /usr/local/dpsearch/sbin/splitter
Он последовательно обработает все файлы из поддиректории /var/splitter/ строя на их основе индекс слов для быстрого поиска. После этой обработки файлы в поддиректории /var/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 &
В поддиректории /sbin находится скрипт run-splitter. Он помогает последовательно выполнить все шаги по построению индекса слов для быстрого поиска.
run-splitter имеет два параметра командной строки:
run-splitter --hup --split
или в короткой форме:
run-splitter -k -s
Каждый параметр запускает соответсвующий шаг создания индекса слов. run-splitter выполняет все шаги созданяи индекса в правильной последовательности:
Посылка сигнала -HUP к cached. Этому соответствует парамет --hup (или -k).
Запуск splitter. Этому соответсвует параметр --split (или -s).
В большинстве случаев достаточно просто запустить скрипт run-splitter со всеми параметрами -k -s. Раздельное использование этих параметров редко необходимо.
run-splitter имеет необязательные параметры -p=n и -v=m для задания соответсвенно паузы в секунда после обработки каждого буффера и указания выдачи сообщений. n - число секунд (по умолчанию 0), m - уровень выдачи (по умолчанию 4).
Для использования search.cgi со способом хранения "cache", сконфигурируйте ваш шаблон search.htm как обычно, добавив "cache" в качестве значения параметра dbmode команды DBAddr
Для применения лимитов при поиске с использование способа хранения 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
Способ хранения cache - самый быстрый в DataparkSearch. Используйте его, если хотите получить максимальную скорость поиска.
Если после окончания индексирования содержимое вашей директории /var не изменяется, вы можете выключить блокировку файлов при открытиии используя команду "ColdVar yes" в файле search.htm (или в файле searchd.conf, если используется searchd). Это позволит вам сэкономить некоторое время, затрачиваемое на блокировку файлов.
Если вы планируете использовать синонимы, стоп-слова или данные ispell, рекомендуется воспользоваться демоном searchd (См. Разд. 5.4>). Демон searchd при запуске загружает эти данные и держит их в памяти. Это позволяет сократить среднее время выполнения запросов на поиск.
Таже searchd может загружать предварительно в память некоторые данные об URL (по 20 байт на каждую проиндекированую страницу) и лимиты cache mode (4 или 8 байт на каждый URL в зависимости от типа лимита). Это позволяет сократить среднее время обработки запроса.
Используйте команду "Cache yes" в вашем поисковом шаблоне search.htm (или в файле конфигурации searchd.conf, если используется searchd) для включения кэша результатов поиска. Это позволит значительно сократить время поиска при повторных запросах.
Если вы используете кэширование результатов поиска, пожалуйста, не забудьте очищать директорию var/cache после каждого сеанса индексирования/переиндексирования.
Если вы планируете использовать 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.
Для способа хранения cache вы можете использовать команду URLInfoSQL no для выключения сохранения информации об URL в SQL-базе. Однако использовав эту команду, вы потеряете возможность использовать лимиты по языку и типу документов.
При помощи команды SRVInfoSQL no вы можете выключить запись вспомогательной информации в SQL-таблицу "srvinfo". В этом случае содержимое таблицы не может быть использовано для загрузки конфигурации командой LoadServerTable (См. Разд. 3.8.1>).
По умолчанию, DataparkSearch помечает все URL, отбираемые к индексированию, как ожидающие индексирования через 4 часа. Это позволяет избежать возможного одновременного индексирования одно и того же URL двумя параллельно запущеными копиями indexer. Однако для больших поисковых баз эта операция пометки может занять некоторое время. Вы можете выключить такую пометку используя команду "MarkForIndex no" в вашем файле конфигурации indexer.conf.
По умолчанию, DataparkSearch пытается добавлять данные в SQL-базу вне зависимости, есть она уже там или нет. На некоторых системах, это может вызывать дополнительную обработку сообщений об ошибках. Чтобы избежать появления таких ошибок, вы можете добавить команду CheckInsertSQL yes в ваш файл конфигурации indexer.conf.
Пользователи MySQL могут задать
опцию DELAY_KEY_WRITE=1
для таблиц DataparkSearch.
Это позволит быстрее обновлять индексы, т.к.они не будут записываться на диск пока файл не будет закрыт.
DELAY_KEY_WRITE
целиком исключает обновление индексов на диске.
С этой опцией индексы хранятся только в памяти и записываются на диск в последнюю очередь, по команду FLUSH TABLES или по завершению mysqld. Запись обновлённых индексов на диск может занимать минуты и нетерпеливые пользователи могут прибить сервер командой kill -9 и этим разрушить индексные файлы. Другим неудобством является необходимость запуска myisamchk для этих таблиц перед стартом mysqld для проверки, на случай, если mysqld был убит до этого.
По этим причинам мы не включили эту опцию в структуру наших таблиц по умолчанию.
Т.к. вся информация в индексах может быть восстановлена из данных, находящихся в таблицах, вы не потеряете данные,
используя опцию DELAY_KEY_WRITE
. Но используйте её на свой страх и риск.
Использование c-ares, библиотеки асинхронного резолвера (dns/c-ares в коллекции портов FreeBSD), позволяет для каждой индексирующей нити выполнять запросы к DNS без блокировки. Пожалуйста учтите, это также повышает число одновременных запросов к вашему DNS серверу.
searchd предназначен для ускорения поиска, особенно при использовании ispell-данных, синонимов и стоп-слов.
Для быстрого поиска, особенно если используется нечёткий поиск на основе ispell или синонимов, а также сегментеры для азиатских языков. Необходимые файлы загружаются в память однажды при запуске searchd, в то время как search.cgi без использования searchd загружает эти данные для каждого запроса.
Таже searchd может загружать предварительно в память некоторые данные об URL (по 20 байт на каждую проиндекированую страницу) и лимиты cache mode (4 или 8 байт на каждый URL в зависимости от типа лимита).
Для возможности разнесения поискового и веб-серверов на разные машины.
Для запуска 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
By Anton Zemlyanov <az@hotmail.ru>
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.
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.
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.
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.
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.
Тэг - специальный параметр, который присваивается группе документов. Основная задача тэгов заключается в возможности группировать документы для ограничения результатов поиска только этой группой документов.
Для присвоения тэга серверу, или части сервера, вы должны использовать команду Tag в
indexer.conf, указав её перед соответсвующей командой Server/Realm/Subnet.
При поиске, вы можете указать тэг задав CGI-параметр
t=xxx
, в HTML форме. Смотрите indexer.conf-dist и
search.htm-dist в качестве примера.
Tag <string>
Используйте эту команду по своему усмотрению чтобы сгруппировать несколько сайтов, помечая их указаным тэгом. При индексировании или поиске, вы можете ограничиваться сайтами только указаного тэга. Можно указывать несколько команд Tag. Команда Tag имеет значение до следующей команды Tag или до конца файла конфигурации. Значение по умолчанию: пустая строка.
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 *
Начиная с версии 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
Существует редактор категорий, написаный на 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
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
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"
Когда задана команда
CategoryTable mysql://user:pass@host/dbname/tablename[?charset=CHARSET]indexer будет загружать информацию о категориях из указаной SQL-таблицы tablename. См. структуру этой таблицы в файле create/mysql/create.txt. Если для вашей базы данных нет соответсвующего скрипта со структурой этой таблицы, возьмите этот файл в качестве образца.
Вы можете использовать несколько команд CategoryTable для загрузки информации о категориях из
различных таблиц. В этом случае значения полей rec_id
должны быть уникальными в пределах всех таких таблиц.
Эта команда очищает содержимое таблицы categories
.
Используйте эту команду для удалений устаревших данных перед загрузкой новых при помощи команды CategoryTable.
DataparkSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5, gbk и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode UTF-8. Это позволяет индексировать документы на более чем 650-ти языках мира, предусмотренных в Unicode.
Внимание! Из-за большого объема перекодировочных таблиц, приводящего к увеличению размера исполняемых файлов, поддержка многобайтных кодировок не компилируется по-умолчанию. Смотрите параметры configure, как активизировать поддержку этих кодировок при компиляции.
Таблица 7-1. Кодировки и их языковые группы
>Группа | Кодировки |
Arabic | cp864, ISO-8859-6, MacArabic, windows-1256 |
Armenian | armscii-8 |
Baltic | cp775, ISO-8859-13, ISO-8859-4, windows-1257 |
Celtic | ISO-8859-14 |
Central European | cp852, ISO-8859-16, ISO-8859-2, MacCE, MacCroatian, MacRomania, windows-1250 |
Chinese Simplified | GB2312, GBK |
Chinese Traditional | Big5, Big5-HKSCS, cp950, GB-18030 |
Cyrillic | cp855, cp866, cp866u, ISO-8859-5, KOI-7, KOI8-C, KOI8-R, KOI8-U, MacCyrillic, windows-1251 |
Georgian | georgian-academy, georgian-ps, geostd8 |
Greek | cp869, cp875, ISO-8859-7, MacGreek, windows-1253 |
Hebrew | cp862, ISO-8859-8, MacHebrew, windows-1255 |
Icelandic | cp861, MacIceland |
Indian | MacGujarati, tscii |
Iranian | ISIRI3342 |
Japanese | EUC-JP, ISO-2022-JP, Shift_JIS |
Korean | EUC-KR |
Lao | cp1133 |
Nordic | cp865, ISO-8859-10 |
South Eur | ISO-8859-3 |
Tajik | KOI8-T |
Thai | cp874, ISO-8859-11, MacThai |
Turkish | cp1026, cp857, ISO-8859-9, MacTurkish, windows-1254 |
Unicode | sys-int, UTF-16BE, UTF-16LE, UTF-8 |
Vietnamese | VISCII, windows-1258 |
Western | cp437, cp500, cp850, cp860, cp863, IBM037, ISO-8859-1, ISO-8859-15, MacRoman, US-ASCII, windows-1252 |
Каждая кодировка имеет модет иметь несколько различных вариантов названия. Например, iso-8859-2, iso8859-2, latin2 - названия одной и той же кодировки. DataparkSearch понимает следующие варианты названий кодировок:
Таблица 7-2. Синонимы наименований кодировок
armscii-8 | armscii-8, armscii8 |
Big5 | big-5, big-five, big5, bigfive, cn-big5, csbig5 |
Big5-HKSCS | big5-hkscs, big5_hkscs, big5hk, hkscs |
cp1026 | 1026, cp-1026, cp1026, ibm1026 |
cp1133 | 1133, cp-1133, cp1133, ibm1133 |
cp437 | 437, cp437, ibm437 |
cp500 | 500, cp500, ibm500 |
cp775 | 775, cp775, ibm775 |
cp850 | 850, cp850, cspc850multilingual, ibm850 |
cp852 | 852, cp852, ibm852 |
cp855 | 855, cp855, ibm855 |
cp857 | 857, cp857, ibm857 |
cp860 | 860, cp860, ibm860 |
cp861 | 861, cp861, ibm861 |
cp862 | 862, cp862, ibm862 |
cp863 | 863, cp863, ibm863 |
cp864 | 864, cp864, ibm864 |
cp865 | 865, cp865, ibm865 |
cp866 | 866, cp866, csibm866, ibm866 |
cp866u | 866u, cp866u |
cp869 | 869, cp869, csibm869, ibm869 |
cp874 | 874, cp874, cs874, ibm874, windows-874 |
cp875 | 875, cp875, ibm875, windows-875 |
cp950 | 950, cp950, windows-950 |
EUC-JP | cseucjp, euc-jp, euc_jp, eucjp, ujis, x-euc-jp |
EUC-KR | cseuckr, euc-kr, euc_kr, euckr |
GB-18030 | gb-18030, gb18030 |
GB2312 | chinese, cn-gb, csgb2312, csiso58gb231280, euc-cn, euc_cn, euccn, gb2312, gb_2312-80, iso-ir-58 |
GBK | cp936, gbk, windows-936 |
georgian-academy | georgian-academy |
georgian-ps | georgian-ps |
geostd8 | geo8-gov, geostd8 |
IBM037 | 037, cp037, csibm037, ibm037 |
ISIRI3342 | isiri-3342, isiri3342 |
ISO-2022-JP | csiso2022jp, iso 2022-jp, iso-2022-jp |
ISO-8859-1 | cp819, 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-10 | csisolatin6, iso 8859-10, iso-8859-10, iso-ir-157, iso8859-10, iso_8859-10, iso_8859-10:1992, l6, latin-6, latin6 |
ISO-8859-11 | iso 8859-11, iso-8859-11, iso8859-11, iso_8859-11, iso_8859-11:1992, tactis, thai, tis-620, tis620 |
ISO-8859-13 | iso 8859-13, iso-8859-13, iso-ir-179, iso8859-13, iso_8859-13, l7, latin-7, latin7 |
ISO-8859-14 | iso 8859-14, iso-8859-14, iso-ir-199, iso8859-14, iso_8859-14, iso_8859-14:1998, l8, latin-8, latin8 |
ISO-8859-15 | iso 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-16 | iso 8859-16, iso-8859-16, iso-ir-226, iso8859-16, iso_8859-16, iso_8859-16:2000 |
ISO-8859-2 | csisolatin2, iso 8859-2, iso-8859-2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, l2, latin-2, latin2 |
ISO-8859-3 | csisolatin3, iso 8859-3, iso-8859-3, iso-ir-109, iso8859-3, iso_8859-3, iso_8859-3:1988, l3, latin-3, latin3 |
ISO-8859-4 | csisolatin4, iso 8859-4, iso-8859-4, iso-ir-110, iso8859-4, iso_8859-4, iso_8859-4:1988, l4, latin-4, latin4 |
ISO-8859-5 | csisolatincyrillic, cyrillic, iso 8859-5, iso-8859-5, iso-ir-144, iso8859-5, iso_8859-5, iso_8859-5:1988 |
ISO-8859-6 | arabic, 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-7 | csisolatingreek, 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-8 | csisolatinhebrew, hebrew, iso 8859-8, iso-8859-8, iso-ir-138, iso8859-8, iso_8859-8, iso_8859-8:1988 |
ISO-8859-9 | csisolatin5, iso 8859-9, iso-8859-9, iso-ir-148, iso8859-9, iso_8859-9, iso_8859-9:1989, l5, latin-5, latin5 |
KOI-7 | iso-ir-37, koi-7, koi7 |
KOI8-C | cskoi8c, koi8-c, koi8c |
KOI8-R | cskoi8r, koi8-r, koi8r |
KOI8-T | cskoi8t, koi8-t, koi8t |
KOI8-U | cskoi8u, koi8-u, koi8u |
MacArabic | macarabic |
MacCE | cmac, macce, maccentraleurope, x-mac-ce |
MacCroatian | maccroation |
MacCyrillic | maccyrillic, x-mac-cyrillic |
MacGreek | macgreek |
MacGujarati | macgujarati |
MacHebrew | machebrew |
MacIceland | macisland |
MacRoman | csmacintosh, mac, macintosh, macroman |
MacRomania | macromania |
MacThai | macthai |
MacTurkish | macturkish |
Shift_JIS | csshiftjis, ms_kanji, s-jis, shift-jis, shift_jis, sjis, x-sjis |
sys-int | sys-int |
tscii | tscii |
US-ASCII | ansi_x3.4-1968, ascii, cp367, csascii, ibm367, iso-ir-6, iso646-us, iso_646.irv:1991, us, us-ascii |
UTF-16BE | utf-16, utf-16be, utf16, utf16be |
UTF-16LE | utf-16le, utf16le |
UTF-8 | utf-8, utf8 |
VISCII | csviscii, viscii, viscii1.1-1 |
windows-1250 | cp-1250, cp1250, ms-ee, windows-1250 |
windows-1251 | cp-1251, cp1251, ms-cyr, ms-cyrl, win-1251, win1251, windows-1251 |
windows-1252 | cp-1252, cp1252, ms-ansi, windows-1252 |
windows-1253 | cp-1253, cp1253, ms-greek, windows-1253 |
windows-1254 | cp-1254, cp1254, ms-turk, windows-1254 |
windows-1255 | cp-1255, cp1255, ms-hebr, windows-1255 |
windows-1256 | cp-1256, cp1256, ms-arab, windows-1256 |
windows-1257 | cp-1257, cp1257, winbaltrim, windows-1257 |
windows-1258 | cp-1258, cp1258, windows-1258 |
indexer перекодирует все документы в кодировку, указанную в команде LocalCharset в файле indexer.conf. Внутри программы перекодировка реализована посредством промежуточного представления в виде Unicode. Особенность DataparkSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, DataparkSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, DataparkSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор 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.
indexer определяет кодировку в документа в следующем порядке:
"Content-type: text/html; charset=xxx"
<META NAME="Content-Type" CONTENT="text/html; charset=xxx">
Выбор этого варианта можно выключить указав команду GuesserUseMeta no в файле конфигурации indexer.conf.
При выключенном автораспозновании: кодировка по-умолчанию, указанная командой "Charset"
При включенном автораспознавании: результат работы автоматического распознавания кодировки.
DataparkSearch имеет механизм автоматического распознавания кодировки и языка документа. В настоящее время распознается около 100 различных комбинаций кодировки и языка. Распознавание реализовано с использованием так называемой "N-Gram-Based Text Categorization" технологии. В комплекте программы поставляются файлы с так называемыми "картами языков", один файл на каждую пару кодировка-язык. По-умолчанию они устанавливаются в /usr/local/dpsearch/etc/langmap/. Чтобы увидеть полный список распознаваемых в настоящий момент языков и кодировок, взгляните в этот каталог. Распознавание работает хорошо на текстах в 500 байт и длиннее. Более короткие тексты могут распознаваться хуже. Для активизации автоматического распознавания кодировки необходимо загрузить языковые карты, используя команды LangMap.
Загружает из указанного файла карту языка и кодировки для автоматического их определения. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд LangMapFile.
LangMapFile langmap/en.ascii.lm
Для создания собственных карт языков служит утилита 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
Используйте команду RemoteCharset в indexer.conf чтобы установить кодировку документов по-умолчанию.
Если индексируемый сервер не выдает кодировку документа ни в заголовке Content-Type, ни в META-тэге, и при этом автоматическое распознаывание либо отключено, либо не дало хорошего результата (т.е. язык и кодировка документа "не похожи" на представленные в загруженных картах), то в качестве кодировки документа будет использована кодировка, указанная в команде RemoteCharset. Если же кодировка по-умолчанию не указана, то будет использована iso-8859-1 (latin1).
Вы можете установить язык документов по-умолчанию
с помощью команды DefaultLang
в
файле indexer.conf.
Это может пригодиться, например, во время поиска для
ограничения поиска только по документам на указанном языке.
DefaultLang <string>
Задаёт язык документов по умолчанию.
DefaultLang en
Чтобы указать кодировку, в которой будут оторбражаться результаты поиска, используйте команду BrowserCharset в search.htm. BrowserCharset может отличаться от LocalCharset. Поисковая программа произведет перекодировку автоматически.
Задаёт кодировку, которая будет использоваться для хранения информации в базе данных. Данные во всех других кодировках будут перекодированы в эту кодировку. См. Разд. 7.1> для подробного описания как выбрать LocalCharset для языков, используемых на вашем сайте или сайтах, а также списка поддерживаемых кодировок. Эта команда должны быть задана один раз и имеет глобальный эффект для всего файла конфигрурации. Значение по умолчанию: iso-8859-1 (latin1).
LocalCharset koi8-r
RemoteCharset <charset>
<сharset>
- кодовая страница по умолчанию для последующих команд Server,
Realm или Subnet.
Используется при индексировании "плохих" серверов, не предоставляющих информации о кодировке в заголовках ответа сервера или в
<META NAME="Content" Content="text/html; charset="some_charset"> на страницах.
Команда действует до конца файла, или до следующей команды RemoteCharset.
Значение по умолчанию: iso-8859-1 (latin1).
RemoteCharset iso-8859-5
URLCharset <charset>
<charset>
- кодовая страница для аргументов последующих команд Server,
Realm или URL.
Эта команда задаёт кодовубю страницу только для аргументов последующих команду и не влияет на определение кодировки
индексируемых страниц.
Имеет меньший приоритет, нежели команда RemoteCharset.
Может задаваться перед каждой командой Server, Realm или URL и
действует до конца файла конфигурации или до следующей команды URLCharset.
Значение по умолчанию: ISO-8859-1 (latin1).
URLCharset KOI8-R
CharsToEscape "\"&<>![]"
Используйте эту команду в вашем поисковом шаблоне для указания списка эскейп-символов для мета-переменных поискового шаблона типа $&(x).
Основная идея Craig Small <csmall@eye-net.com.au>
.
Небольшие изменения Alex Barkov <bar@mnogosearch.org>
.
Зачастую требуется поддержка различных языков, что означает использование различных файлов 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;
Дальнейшая установка проводится в три этапа.
Установка нескольких шаблонов.
Основная идея состоит в том, чтобы иметь один файл 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.cgi или search.php (отдельно от включаемых файлов, если желаете, указав для PHP include_path и разместив их в другом месте).
Затем создайте символьные ссылки:
search.cgi | Оригинальный файл |
search.en.cgi | символьная ссылка |
search.pl.cgi | символьная ссылка |
search.ru.cgi | символьная ссылка |
Или для PHP фронт-енда:
Конфигурирование Apache
Теперь нужно научить apache понимать, что надо здесь делать. Вам нужно включить процесс определения содержимого (negotiation) и изменить индексы. Я использовал файл .htaccess, но вы можете задать это и в файле конфигурации apache.
AddLanguage en .en AddLanguage pl .pl AddLanguage ru .ru DirectoryIndex search search.cgi (or search.php) Options FollowSymlinks MultiViews
Вы набираете url http://myhost/mydir/search без слэша на конце !!
Ваш броузер говорит "Я предпочитаю английский язык (т.е. определён язык en) "
Apache находит search.en.cgi (DirectoryIndex даёт search, MultiViews даёт en.cgi)
SCRIPT_FILENAME, используемый обоими search.cgi и search.php равен somepath/search.en.cgi
Замечание: Большинство других переменных будут иметь неправильные значения, либо search, либо search.cgi)
Вы измезменяете config.inc как указано выше, для использования search.en.htm.
Что случится, если пользователь, к примеру, захочет немецкий ? У нас нет search.de.cgi (search.de.php), т.е. первый элемент в списке DirectoryIndex не отработает, тогда сервер попробует второй, search.php Да, он получит страницу на английском, но это лучше, чем 404.
Это работает, возможно вам понадобиться еще что-то подкрутить в конфигурации apache, - я пробовал на сервере, для которого уже всё было настроено и возможно что-то упустил в описании конфигурирования веб-сервера.
У вас могут возникнуть некоторые проблемы с определением языка, вызванные:
Некотрыми кэшами, неследующими стандартам
Некоторыми броузерами, неследующими стандартам
Некоторыми пользователями, неуказывающими или неправильно указывающими предпочитаемый язык в настройках.
Команда разработчиков apache работает над возможностями обхода некоторых из этих трудностей, если это возможно. Для плотно используемого веб-сервера, вы можете ожидать примерно один е-мейл в неделю с описанием подобной проблемы.
Традиционное японское, корейское, тайское или китайское письмо не предусматривает размещение между словами фразы символов-разделителей, аналогичных пробелу, используемому, например, в европейских языках. Поэтому при индексировании текстов на этих языках необходимо дополнительно производить разбиение фраз на отдельные слова.
Иногда для красоты, текст на китайском, японском, корейском или тайском языке набирается с пробелом между каждым иероглифом. В этом случае для индексирования таких текстов, вы можете использовать команды "ResegmentChinese yes", "ResegmentJapanese yes", "ResegmentKorean yes" or "ResegmentThai yes". При включенном ресегментировании все пробелы между символами в тексте убираются, а затем весь текст целиком обрабатывается сегментерами DataparkSearch (см. ниже).
Для разбиения на слова фраз японского языка используется система морфологического анализа японского языка ChaSen или морфологический анализатор японского языка MeCab. Поэтому её необходимо установить одну из этих систем до начала сборки и установки DataparkSearch.
Для включения поддержки разбиения фраз японского языка, вам необходимо указать для configure
ключ --enable-chasen
или --enable-mecab
.
Для разбиения на слова фраз китайского языка используется частотный словарь китайского языка, а разбиение производится методом динамического программирования чтобы суммарная частота использования всех получаемых слов после разбиения была максимальной.
Для включения поддержки сегментера фраз на китайском языке, необходимо при сборке DataparkSearch включить поддержку кодировки GB2312, если будет использоваться словарь упрощенного китайского mandarin.freq, или кодировки Big5, если будет использоваться словарь традиционного китайского TraditionalChinese.freq, а также указать в indexer.conf при помощи команды LoadChineseList частотный словарь слов китайского языка для загрузки.
LoadChineseList [charset dictionaryfilename]
По умолчанию используется кодировка GB2312 и словарь mandarin.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadChineseList
Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.
Для разбиения на слова фраз тайского языка используется тот же метод, что и для китайского языка, оличие заключается в использовании частотного словаря тайского языка.
Для включения поддержки сегментера фраз на тайском языке, необходимо указать в indexer.conf при помощи команды LoadThaiList частотный словарь слов тайского языка для загрузки.
LoadThaiList [charset dictionaryfilename]
По умолчанию используется кодировка tis-620 и словарь thai.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadThaiList
Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.
Для разбиения на слова фраз корейского языка используется тот же метод, что и для китайского языка, оличие заключается в использовании частотного словаря корейского языка.
Для включения поддержки сегментера фраз на корейском языке, необходимо указать в indexer.conf при помощи команды LoadKoreanList частотный словарь слов корейского языка для загрузки.
LoadKoreanList [charset dictionaryfilename]
По умолчанию используется кодировка euc-kr и словарь korean.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadKoreanList
Замечание: Вам необходимо скачать частнотные словари с нашего сайта или с одного из зеркал, см. Разд. 1.2>.
Некоторые веб-серверы могут поддерживать механизм согласования языка содержимого. В этом случае по одному URL может выдаваться несколько различных документов, в зависимости от языковых предпочтений клиента.
Для индексирования всех страниц таких серверов предназначена клманда VaryLang, задающая список языков, разделённых пробелами, которые будут запрашиваться при индексировании каждого URL, имеющего несколько языковых вариантов.
Пример использования:
VaryLang "ru en fr"
При индексировании будут запрашиваться копии документов на русском, английском и французском языках.
Откройте предпочитаймый вами фронт-энд в окне броузера:
http://your.web.server/path/to/search.cgi
Чтобы найти что-то, просто наберите слова, которые хотите найти и нажмите кнопку ОТОСЛАТЬ.
Например: mysql odbc.
DataparkSearch найдет все документы, содержащие слово mysql
и/или слово odbc
.
Лучшие документы, имеющий более высокую релевантность и популярность будут показаны первыми.
Чтобы найти фразу, просто заключите её в кавычки. Например: "uncontrollable sphere".
Фронт-энды 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, это означает, что поиск поиск будет ограничен
страницами старше или новее указаной даты. Старше/новее задаётся параметром Если dt равно range, обозначает, что поиск будет ограничен
двумя датами, начала и конца. Даты задаются двумя параметрами, соответственно |
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 - четырёхцифровой год. |
Параметр 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.
При сипользовании динамических 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.conf.А search.cgi сначала проверяет переменную DPSEARCH_SELF и только потом, при неудаче SCRIPT_NAME. Вот пример использования переменной окружения DPSEARCH_SELF при помощи команд конфигурирования сервера Apache SetEnv/PassEnv:
SetEnv DPSEARCH_SELF /path/to/search.cgi PassEnv DPSEARCH_SELF
Зачастую необходимо использовать несколько различных шаблонов с одним и тем же search.cgi. Существует несколько способов сделать это. Они указываются ниже в том порядке, в каком search.cgi определяет имя шаблона:
search.cgi проверяет CGI параметр tmplt
.
Таким образом вы можете задать имя файла нужного шаблона в этом параметре.
search.cgi проверяет переменную окружения
DPSEARCH_TEMPLATE
. Таким образом вы можете установить путь до нужного шаблона в этой переменной.
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, и т.д.
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.
Если два предыдущих способа не помогли определить имя шаблона,
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>
Оператор 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" в любой секции документа.
Для задания более сложных запросов, вы можете строить булевы запросы поиска.
Необходимо в поисковой форме указать режим поиска 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". Вы также можете использовать знак ' для этого оператора.
Язык запросов хоть и прост, но достаточно мощный. Рассматривайте такой запрос как обычное булево выражение.
DataparkSearch поддерживает только префиксный вариант Verity Query Language.
Также поддерживается только следующее подмножество операторов VQL:
Таблица 8-2. Операторы VQL, поддерживаемые DataparkSearch
<ACCRUE> | эквивалентен оператору OR булевого запроса. |
<AND> | эквивалентен оператору AND булевого запроса. |
<ANY> | эквивалентен оператору OR булевого запроса. |
<NEAR> | эквивалентен оператору NEAR булевого запроса. |
<NOT> | эквивалентен оператору NOT булевого запроса. |
<OR> | эквивалентен оператору OR булевого запроса. |
<PHRASE> | эквивалентен фразе в булевом запросе. |
<WORD> | рассматривается как пустой оператор. |
Устаревшие документы продолжают включаться в результаты поиска по их старому содержимому до тех пор, пока эти документы не будут удалены или обновлены с очередным переиндексированием.
Начиная с версии 4.19 DataparkSearch также предоставляет модуль для веб-сервера Apache, реализующий возможности searchd и search.cgi.
Как и searchd (см. Разд. 5.4.1>), для ускорения поиска, mod_dpsearch может держать в памяти предварительно загруженными некоторые данные.
В дополнение, mod_dpsearch держит в памяти последний использованый шаблон поиска. Тем саммым время поиска сокращается на время загрузки и разбора шаблона поиска для каждого поискового запроса начиная со второго.
Сам модуль mod_dpsearch уже находится в памяти, когда приходит поисковый запрос от пользователя, в то время как search.cgi, как правило, загружается с диска для каждого запроса.
Чтобы включить поддержку этой возможности, добавьте к 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
.
Пользователи 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-кодировка символов.
Определены следующие секции шаблонов: TOP>, BOTTOM>, RESTOP>, RES>, BETWEENRES>, CLONE>, RESBOT>, navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>, notfound>, noquery>, error>, variables>.
Эта секция всегда вставляется первой на каждой странице ответов. Вы должны начинать эту секцию с <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 -->
Эта секция всегда выводится последней на каждой странице результатов поиска. Таким образом вы должны разместить здесь все закрывающие тэги для соответсвующих открывающих тэгов из секции 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-->
Эта секция вставляется непосредственно перед результатами поиска. Служит местом указания общих параметров результата поиска. Вы можете использовать для этого слудующие метасимволы (переменные):
$(first) - номер первого документа, отображаемого на этой странице
$(last) - номер последнего документа, отображаемого на этой странице
$(grand_total) - общее число документов найденых документов до группировки по сайтам
$(WE) - результат поиска со всей статистикой по каждой словоформе поискового запроса
$(W) - результат поиска со статистикой по словам запроса, указывается двумя числами, разделёнными знаком '/'. Первое число указывает число найденых вхождений слова из запроса, второе - число всех найденых словоформ этого слова. Например, test: 25/73 обозначает, что слово "test" найдено 25 раз, а число всех его словоформ ("test", "tests", "testing", и т.д..) - 73.
$(WS) - результат поиска в короткой форме с отображением числа всех словоформ каждого слова запроса.
$(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-->
Эта секция используется для вывода разнообразной информации о каждом найденном документе. Могут использоваться слудующие метасимволы (переменные):
$(Body) Текст документа, первые несколько строк, или цитаты из документа по словам запроса, если используется stored, чтобы дать представление о содержимом документа.
$(Content-Type) Content-type документа (например, text/html)
$(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-->
Содержимое этой секции вставляется между результатами поиска, выврдимыми секцией RES. Это используется в том случае, если формат вашего документа с результатами поиска требует разделитель между записями. Например, при выдаче результатов в формате JSON (см. doc/samples/json.htm).
Содержимое этой секции включается в результат поиска вместо метасимвола $(CL) для каждого найденного клона документа. Служит для указания всех URL с одним и тем же содержимым (как зеркала и т.п.). Вы можете использовать те же мета символы, что и в секции res.
Ниже пример секции clone.
<!--clone--> <li><A HREF="$(DU)" TARGET="_blank">$(DU)</A> ($(DC)) $(DM) <!--/clone-->
та секция выводится непосредственно после результатов поиска. Обычно здесь размещается навигация по страницам поиска.
Вот пример секции resbot:
<!--resbot--> <HR> <CENTER> Result pages: $(NL)$(NB)$(NR) </CENTER> <!--/resbot-->
Навигация - сложная штука, создаваемая из следующих секций шаблона: navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>.
Используются для образования ссылки на предыдущую страницу. Если предыдущая страница существует, исаользуется <!--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-->
Используется для печати текущей страницы в списе страниц.
<!--navbar0--> <TD><IMG...><BR>$(NP)</TD> <!--navbar0-->
Эти секции используются для печати ссылки на следующую страницу. Если следующая страница существует, используется секция <!--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-->
Используется для печати ссылок на другие страницы списка страниц результата поиска.
<!--navbar1--> <TD> <A HREF="$(HR)"> <IMG...></A><BR> <A HREF="$(NH)">$(NP)</A> </TD> <!--/navbar1-->
Как говорит имя этой секции, она выводится только в случае, если по запросу не найдено ни одного документа. Вы можете дать сдесь небольшие советы по изменению запроса, либо по ослаблению ограничений поиска.
Ниже пример секции 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-->
Эта секция выводится если пользователь выдал пустой запрос на поиск.. Ниже приводится пример этой секции:
<!--noquery--> <CENTER> You haven't typed any word(s) to search for. </CENTER> <HR> <!--/noquery-->
Эта секция выводится только при обнаружении ошибок во время поиска. Например, если не запущен SQL сервер и т.п. Вы можете использовать следующий метасимвол (переменную): $(E) - текст сообщения об ошибке.
Пример секции error:
<!--error--> <CENTER> <FONT COLOR="#FF0000">An error occured!</FONT> <P> <B>$(E)</B> </CENTER> <!--/error-->
В специальной секции 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>)
Вы можете использовать <!INCLUDE Content="http://hostname/path"> дял включения внешних URLs в страницу результатов поиска.
ВНИМАНИЕ: Вы можете использовать <!INCLUDE> ТОЛЬКО в следующих секциях шаблона:
<!--top-->
<!--bottom-->
<!--restop-->
<!--resbot-->
<!--notfound-->
<!--error-->
Это пример использования включения:
<!--top--> .... <!INCLUDE CONTENT="http://hostname/banner?query=$&(q)"> ... <!--/top-->
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.
ВНИМАНИЕ: Так как файл шаблона содержит такую информацию как пароль, во избежание утечки этого пароля, рекомендуется проверить права доступа к нему, чтобы обеспечить право чтения только для программы поиска.
В этой секции подразумевается, что в качестве фронтэнда используется search.cgi.
Файл 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--> используются, если нет больше страниц в том или другом направлении.
Простейший 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.
Многие современные браузеры могут работать с формами, разнесёнными по разным элементам таблицы или разным таблицам, однако создание таких форм противоречит всем стандартам создания 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">если вы хотите использовать другие значения вместо значений по умолчанию и/или не заботить пользователя выбором значения этого параметра.
Необходимо отметить, что 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">, несмотря на несоответствие структуре файловой системы.
Чтобы добавить форму поиска на любой вашей страницы, разместите следующий код на этих страницах где сочтёте нужным:
<FORM METHOD=GET ACTION="http://path-to-search.cgi"> <INPUT TYPE="text" NAME="q" VALUE=""> <INPUT TYPE="submit" VALUE="Search!"> </FORM>
При сортировке документов перед выдачей результата поиска DataparkSearch по умолчанию учитывает два параметра каждого документа: релевантность и популярность. Сначала документы сортируются по релевантности, а при равенстве, по популярности.
Релевантность каждого документа вычисляется как косинус угла между вектором весов этого документа и вектором весов,
соответствующему поисковому запросу, умноженный на 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= | Задаёт |
--with-bestwrdcnt= | Задаёт |
--with-distfactor= | Задаёт |
--with-posfactor= | Задаёт |
--with-wrdcntfactor= | Задаёт |
--with-wrdunifactor= | Задаёт |
DataparkSearch поддерживает два метода расчёта рейтинга популярности. Метод, использовавшийся в предыдущих версиях получил название Goo, а новый метод называется Neo. По умолчанию используется метод Goo. Чтобы выбрать нужный метод расчёта популярности используйте команду PopRankMethod:
PopRankMethod Neo
Для метода расчёта популярности Neo,а также для полного варианта метода Goo вам необходимо включить сбор ссылок между страницами командой CollectLinks yes в вашем файле конфигурации indexer.conf. Однако, это незначительно уменьшает скорость индексирования, поэтому по умолчанию сбор этих ссылок выключен.
По умолчанию, для расчета рейтинга популярности используются только ссылки между различными сайтами.
Если в indexer.conf указана опция
PopRankSkipSameSite no
,
то при расчёте рейтинга популярности учитываются все ссылки.
Вы можете присвоить начальное значение рейтинга популярности страницы используя МЕТА таг DP.PopRank (см. Разд. 4.3>).
Рейтинг популярности рассчитывается в два этапа. На первом этапе значение параметра 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
При булевом поиске, состоящем из двух и более слов, необходимо вводить операторы (&, |, ~). Т.е. необходимо вводить a & book вместо a book. См. также Разд. 8.1.7>.
Эта возможность позволяет связать слова между <a href="xxx"> и </a> с документом, на который указывает данная ссылка, а также слова из аттрибута alt тэга img с картинкой, на которую указывает этот тэг. Для включения этой возможности, используйте команду CrossWords yes в indexer.conf и search.htm, а также определите секцию crosswords в файле sections.conf.
При помощи команды CrossWordsSkipSameSite можно управлять сбором кросс-слов со страниц того же сайта. Если указана опция yes (по умолчанию), то сбор кросс-слов со страниц того же сайта не происходит. Для включения учета таких слов необходимо явно задать опцию no:
CrossWordsSkipSameSite no
Алгоритм Построения Рефератов (SEA) позволяет построить реферат из трёх наиболее релевантных предложений для каждого проиндексированого документа, состоящего из более 6 предложений. Чтобы включить эту возможность, добавьте эту команду в ваш файл seaction.conf:
Section sea x yгде
x
- номер секции и y
- максимальный размер значения секции, задайте его равным 0, если вы не хотите
показывать эту секцию на тсраницах результатов поиска.
Если вы указываете ненулевое значение для y
, вы можете использовать мета-переменную $(sea)
в вашем шаблоне поиска для отображения реферата в результатах поиска.Соответствующие команды конфигурирования:
Команда SEASentenceMinLength задаёт минимальную длину предложения, которое будет использовано для создания реферата. Значение по умолчанию: 32.
Команда SEASentences используется для задания максимального числа предложений, используемых при построении реферата. Значение по умолчанию: 64. В виду нелинейной сложности алгоритма SEA, вы можете установить значение этого параметра исходя из желаемой производительности индексирования.
При помощи команды SEASections вы можете указать список секций документов, по которым будут строиться рефераты. По умолчанию, для построения рефератов используется только секция "body".
SEASections "body, title"
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;
Кэш результатов поиска обеспечивает быстрый ответ 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
Когда DataparkSearch используется с поддержкой ispell, для расширения поискового запроса нахождятся все грамматические формы введенных слов. При индексировании все найденные слова сохраняются в базе, а при поиске для каждого введенного слова находятся все его грамматические формы и уже с учетом всех этих форм производится поиск документов. Т.е., поисковик будет искать слово "test", если в качестве запроса введены слова "testing" или "tests".
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
Для использования 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 увеличивается.
Возможно, на ваших страницах встретяться несколько редких слов, не включённых в словари ispell. В этом случае для построения всех форма слова выбирается запись с максимально совпадающим суффиксом.
Вы также можете создать список таких слов по одному на каждую строку:
rare.dict: ---------- webmaster intranet ....... www http ---------
Вы также можете указать флаги ispel для этих слов (описание флагов ispel смотрите в документации ISpell) для поиска всех словоформ, например, "webmaster" и "webmasters". Попробуйте найти в словарях ispel слово с таким же способом образования различных форм и скопировать его флаги для нового слова. Например, словарь английского языка содержит такую строчку:
postmaster/MS
Таким образом, webmaster с флагом MS, возможно будет правильным:
webmaster/MS
Скопируйте составленный вами словарь в поддиректорию /etc корневой директории установки DataparkSearch и добавьте соответсвующие команды в файл конфигурации.
Вы можете найти файлы Ispell для многих языков на этой странице.
Для японского языка созданы квази-Ispell файлы, предназначенные для использования только с DataparkSearch. Вы можете скачать эти файлы с нашего веб-сервера или с одного из наших зеркал. См. Разд. 1.2>.
Quffix [lang] [charset] [ispell-like suffix file name]Команда Quffix похожа на команду Affix, описанную выше, за исключением того, что эти правила применяются к словам, указанным в запросе, а не к их нормальным формам, как это происходит для команды Affix. Загружаемый файл должен содержать только суффиксные правила (в терминах афиксных файлов ispell).
Эта команда предназначена, например, для указания правил перехода от одной части речи к другой в русском языке, когда это необходимо.
Когда DataparkSearch используется с поддержкой aspell, возможно автоматическое расширение поискового запроса вариантами слов с исправленым правописанием. Чтобы включить эту возможность, необходимо установить Aspell на вашу систему до сборки DataparkSearch. Чтобы включить эту возможность, необходимо добавить команду AspellExtensions yes в файлы конфигурации indexer.conf и search.htm (или searchd.conf, если используется searchd).
Автоматиская корректировка правописания при поиске происходит только при установке параметра поиска sp
, см.
Разд. 8.1.2>.
Файлы синонимов устанавливаются в поддиректорию 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
Эта команда включает режим тезауруса для списка синонимов. В этом режиме только слова, расположенные на одной строке считаются синонимами.
Начиная с версии 4.17 DataparkSearch также поддерживает нечувствительный к акцентам над буквами поиск.
Чтобы включить поддержку этой возможности, используйте команду AccentExtensions в вашем шаблоне search.htm (или в файле конфигурации searchd.conf, если используется searchd) для автоматического построений копий слов из запроса без учёта акцентов над буквами, и в вашем файле конфигурации indexer.conf для автоматического добавления таких копий в базу.
AccentExtensions yes
Если команда AccentExtensions в файле конфигурации указана перед командами Spell и Affix, то копия этих данных без учёта акцентов над буквами будет загружаться автоматически.
Начиная с версии 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 здесь означает, что процесс применения регулярных выражений останавливается после применения этого правила.
Пожалуйста, присылайте ваши списки синонимаов на адрес <maxime@maxime.net.ru>
.
При составлении сообщения о баге, пожалуйста, указывайте версию DataparkSearch и сообщайте как моно больше информации о вашей проблеме. Такая информация, как используемая платформа, операционная система, версия базы данных, статистика базы данных (например, число URL в базе, или число записей в той или иной таблице базы данных) может быть весьма полезной для исправления возможной ошибки.
Пожалуйста, сообщайте об ошибках и багах при помощи нашей Системы учёта ошибок доступной на веб-сервере DataparkSearch. Пожалуйста, не шлите сообщения об ошибках в списки рассылки или на почтовые адреса разработчиков!
Используйте Систему учёта ошибок DataparkSearch для простомтра текущих и исправленых ошибок. Вы можете использовать эту систему для сообщения о замеченых вами ошибках или предложения новых функций или улучшений.
Если 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.
При компиляции DataparkSearch собирается и устанавливается libdpsearch - библиотека, с помощью которой легко расширить Ваше приложение возможностью поиска. Программа на СИ, использующая libdpsearch, должна включить заголовочный файл dpsearch.h.
В зависимости от параметров, выбраных при компиляции 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`
Описания API DataparkSearch пока нет. Это связано с тем, что API находится под постоянным изменением от версии к версии, и пока не стабилизирован. В качестве примера приложения, использущего библиотеку libdpsearch, можно изучить программу search.c.
Полная структура таблиц базы данных, используемых DataparkSearch, описана в sql-скрптах создания структуры базы данных, находящихся в соответстувующих директориях поддиректории create.
Таблица 9-1. Структура таблицы server
rec_id | Уникальный идентификатор записи. |
enabled | Флаг включения записи для загрузки при старте indexer. |
url | URL или его фрагмент или шаблон, указываемый в соответствующей команде. |
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. |
Если вам наравится DataparkSearch Engine и вы хотите поддержать его дальнейшее развитие, пожалуйста, окажите материальную поддержку проекту через Kagi или через PayPal. Любая сумма будет с благодарностью принята.