|
|
DataparkSearch Engine 4.53Справочное руководствоCopyright © 2003-2009 OOO DataPark Copyright © 2001-2003 Lavtech.com corp. Этот проект посвящается Ноеми.
Глава 1. ВведениеDataparkSearch является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или многих веб-серверах. DataparkSearch состоит из двух частей. Первая часть - индексирующий механизм (indexer). Indexer пробегает по ссылкам и сохраняет в базе данных все найденные слова и новые ссылки. Вторая часть состоит из CGI-программы, предоставляющей возможность поиска в данных, собраенных indexerом. DataparkSearch отделился от mnoGoSearch CVS версии 3.2.16 27 ноября 2003 года как DataparkSearch версии 4.16. Первая версия mnoGoSearch была выпушена в ноябре 1998. До октября 2000, когда проект был передан Lavtech.Com Corp. и переименован в mnoGoSearch, поисковый движок носил имя UDMSearch. Последние изменения можно найти на нашем web-сервере. 1.1. Возможности DataparkSearchОсновные возможности DataparkSearch:
1.2. Где взять DataparkSearchПоследняя версия DataparkSearch доступна на http://www.dataparksearch.org/, а также на Google Code: http://code.google.com/p/dataparksearch/. DataparkSearch также доступен в коллекции портов FreeBSD, см. www.freshports.org/www/dpsearch и в репозитории T2 Linux SDE. Исходники DataparkSearch доступны через SVN на Google Code: svn checkout http://dataparksearch.googlecode.com/svn/trunk/ dataparksearch-read-only 1.3. DisclaimerThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See COPYING file for details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1.4. Авторы Maxim Zakharov
1.4.1. Помощники Michael Kynast Jean-Gerard Pailloncy: Тестирование на OpenBSD. Amit Joshi: Тестирование на CentOS, пэкадж для Debian, идею по улучшению работы на нескольких PC и с несколькими DBAddr. mnoGoSearch разработчики и помощники
Глава 2. Установка2.1. Требования к SQL базе даныхЕсли вы хотите скомпилировать DataparkSearch с одной из поддерживаемых SQL баз данных, вы должны установить эту SQL базу данных до начала установки DataparkSearch. Начиная с версии 3.2 возможно использовать несколько различных SQL баз данных одновременно. Вы также должны иметь права на создание новой базы данных и/или записи в уже существующую базу данных. О MySQL: Если вы хотите собрать DataparkSearch с поддержкой MySQL, вам потребуется версия 4.1 или старше. Библиотека libz должна быть также установлена для успешной компиляции DataparkSearch с поддержкой MySQL. Пользователи Linux могут установить ее из zlib-devel RPM. О PostgreSQL: Если вы хотите собрать DataparkSearch с поддержкой PostgreSQL, вам потребуется версия 7.3.x или старше. PostgreSQL 8.1 рекомендуется для лучшей производительности. Об iODBC: работает с iodbc-2.50.22a. Об unixODBC: работает с unixODBC-1.7. Об InterBase:
О FreeTDS: Работает с версий 0.52 и с MS SQL 7.0. Об Oracle8: Работает с версией 8.0.5.X. Об Oracle8i: Работает с версией 8.1.6 R2 EE. 2.2. Поддерживаемые операционные системыМы используем GNU Autoconf, что позволяет скомпилировать DataparkSearch почти на всех современных UNIX системах, имеющих копилятор C. Разработка ведётся на FreeBSD 5.x с использованием PostgreSQL 8.1. На даенный момент известно об успешных установках DataparkSearch на следующих опреационных системах:
Мы надеемся, что DataparkSearch будет работать и на других Unix платформах. Пожалуйста, сообщайте об успешных установках на других платформах по адресу maxime@maxime.net.ru. О NFS: Замечены проблемы при запуске DataparkSearch поверх NFS v4 на Linux 2.6.17. Однако все прекрасно работает при использовании на этой системе NFS v3. 2.3. Инструментарий, необходимый для установкиДля компиляции и установки DataparkSearch из исходников вам потребуется следующий инструментарий:
2.4. Инсталяция DataparkSearch
2.5. Возможные проблемы установки
Если информация выше не помогла вам, пожалуйста, отправьте описание вашей проблемы на список рассылки
2.6. Простая рутина использованияПеред первым запуском indexer, вам необходимо указать пространство индексирования (см. Разд. 3.6>). В простом случае, когда вам необходимо индексировать один сайт, необходимов добавить команду Server, аналогичную указанной ниже в ваш файл конфигурации indexer.conf: Server http://www.server.ext/ Запустите indexer для индексирвоания ваших данных и записи информации об URL: sh$ /usr/local/dpsearch/sbin/indexer -W 2.7. Регистрация установкиЕсли вы используете DataparkSearch для организации поиска на публично доступном веб-сервере, вы можете сообщить нам об этом на нашем сайте, на странице наших пользователей. Глава 3. Индексирование3.1. Общая информация об индексировании3.1.1. КонфигурированиеСначала необходимо сконфигурировать DataparkSearch. Конфигурирование indexer полностью описано в файле indexer.conf-dist. Вы найдете его в директории etc исходников DataparkSearch. Вы также можете посмотреть примеры в директории doc/samples. Для установки файла indexer.conf перейдите в директорию DataparkSearch /etc, скопируйте indexer.conf-dist в indexer.conf и отредактируйте последний. Для конфигурирования CGI-программы поиска (search.cgi и/или search.php3, или другой), Вы должны в директории DataparkSearch /etc скопировать файл search.htm-dist в search.htm и отредактировать последний. См. Разд. 8.3> для подробного описания. 3.1.2. Запуск indexerПросто запускайте indexer раз в неделю (в день, в час, ...) для обновления информации о Ваших серверах и страницах. Вы можете также вставить запуск indexer в Ваш файл заданий crontab. По умолчанию, indexer, вызванный без всяких параметров командной строки,
переиндекирует, только устаревшие документы. Вы можете задать период "старения" при помощи команды Period
в indexer.conf. Если Вам необходимо переиндекировать все документы, независимо от того, устарели
они или нет, используйте ключ Запрашивая документы, indexer посылает HTTP заголовок
If-Modified-Since для документов уже находящихся в базе.
Когда indexer получает очередной документ, он вычисляет контрольную сумму документа,
если она совпадает со старой контрольной суммой, хранящейся в базе данных, докумен заново не разбирается (считается неизменённым)
Ключ indexerа Если на запрос документа DataparkSearch получает HTTP-статусы переадресации 301,302,303, он попытается проиндексировать URL, указанный в заголовке Location: ответа сервера. 3.1.3. Создание SQL-таблицДля создание SQL-таблиц, необходимых для работы DataparkSearch, используйте indexer -Ecreate. При запуске с таким аргументом, indexer ищет файл, содержащий SQL-выражения, необходимые для создания всех таблиц, учитывая тип базы данных и режим хранения, указанные в команде DBAddr в indexer.conf. Поиск файлов производится в каталоге /share инсталляции DataparkSearch, т.е. обычно в /usr/local/dpsearch/share/. 3.1.4. Удаление SQL-таблицДля удаления SQL-таблиц, созданных DataparkSearch, используйте indexer -Edrop. Поиск файл с запросами для удаления таблиц производится в каталоге /share инсталляции DataparkSearch. 3.1.5. Управление подсекциямиindexer имеет ключи 3.1.6. Как очистить базу данныхЧтобы очистить всю базу данных, используйте команду indexer
-C. Вы можете также удалить тольеко часть базы, используя ключи указания подсекций
3.1.7. Статистика базы данныхЕсли Вы запустите indexer -S, Вы получите статистику базы данных включающую общее число документов, и число устаревших документов для каждого статуса. Ключи указания подсекций также действуют для этой команды. Значения кода статуса:
Если статус не 0, он равен коду HTTP ответа, некоторые коды ответов HTTP:
Код ответа HTTP 401 обозначает, что документ защищён паролем. Вы можете использовать команду AuthBasic в indexer.conf для указания login:password для URL. Код ответа HTTP 404 означает, что на одной из Ваших страниц есть ссылка на несуществующий документ, или есть ошибка в указании URL.. Смотрите документацию по HTTP для подробного объяснения различных кодов ответа HTTP. 3.1.8. Проверка ссылокБудучи запущенным с ключом 3.1.9. Параллельное индекированиеПользователи MySQL и PostgreSQL могут запускать несколько indexer одновременно с одним и тем же файлом конфигурации indexer.conf. Мы успешно опробовали 30 одновременно работающих indexer использующих базу данных MySQL. Indexer использует механизм блокировки MySQL и PostgreSQL для избежания двойного индексирования одних и тех же документов разными одновременно работающими indexer. Параллельное индексирование может работать некорректно с остальными поддерживаемыми SQL серверами. Вы можете использовать многопоточную версию indexer c любым SQL сервером, поддерживающим параллельные соединения с базой. Многопоточная версия использует свой собственный механизм блокировки. Не рекомендуется использовать одну и ту же базу с различными файлами конфигурации indexer.conf! Один процесс может добавлять некоторые документы в базу, в то время как другой - удалять эти же документы, и оба могут работать без остановки. С другой стороны, Вы можете запускать несколько indexer c различными файлами конфигурации и различными базами для любого поддерживаемого SQL сервера. 3.2. Реакция на коды HTTP-ответаВ этом разделе описана реакция DataparkSearch на разные коды HTTP-ответа. Для описания использован псевдо-язык.
3.3. Поддержка Content-EncodingПоисковый движок DataparkSearch поддерживает сжатие HTTP запросов и ответов (Content encoding). Сжатие запросов и ответов http-сервера позволяет значительно улучшить производительность обработки http-запросов за счет уменьшения объёма передаваемых данных. Использование сжатия http-запросов позволяет уменьшить трафик в два и более раз. В спецификации HTTP 1.1 (RFC 2616) определены четыре метода кодирования содержимого ответов сервера: gzip, deflate, compress, и identity. Если включена поддержка Content-encoding, indexer шлёт http-серверу заголовок Accept-Encoding: gzip,deflate,compress. Если http-сервер поддерживает любой из методов кодирования gzip, deflate or compress он шлёт ответ, закодированый этим методом. Для сборки DataparkSearch с поддержкой сжатия HTTP-запросов, необходимо наличие библиотеки zlib, установленной на вашем компьютере. Чтобы включить поддержку Content encoding, сконфигурируйте DataparkSearch с указанием следующего ключа: ./configure --with-zlib Используете этот ключ совместно с другими нужными вам ключами. 3.4. СтопсловаСтопслова -- наиболее часто используемые слова, т.е слова, встречающиеся почти в каждом документе коллекции. Стопслова удаляются перед созданием индекса, что посзволяет сократить размер индекса без сколько-нибудь значимой потери в качестве поиска. 3.4.1. Команда StopwordFileЗагружает стоп-слова из указаного файла. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд StopwordFile. StopwordFile stopwords/en.sl Вы должны использовать один и тот же надор команд StopwordFile в indexer.conf и search.htm (searchd.conf если используется searchd). 3.4.2. Формат файла стопсловВы можете создавать свои файлы стоп-слов. В качестве примера, вы можете использовать файл английских стоп-слов etc/stopwords/en.sl. В начале листа поместите следующие две команды: Language: en Charset: us-ascii
Затем следует список слов, по одному на строку. Каждое слово записывается в кодировке, указанной выше командой Charset:. Вы можете использовать дополнительную команду Match: для задания шаблона, любое слово подпадающее под который будет считаться стоп-словом. Например: Match: regex ^\$## По этой команде любое слово, начинающееся с $## будет рассматриваться как стоп-слово. Опции команды Match: аналогичны опциям команды Allow (см. Разд. 3.10.14>). Аргументы записываются в кодировке, указанной командой Charset:. Регулярные выражения в данный момент ограничены (например, не поддерживаются интервалы). 3.5. Клоны документовКлоны -- документы, имеющие одинаковые значения Hash32 вычисляемой по всем секциям документа. Копии одного и того же документа имеют одинаковые значения Hash32. Это позволяет не индексировать дубликады документов в коллекции. Однако: всли в файле sections.conf определена только секция title, тогда все документы с разными телами, но одинаковыми title будут считаться клонами. 3.5.1. Команда DetectClonesDetectClones yes/no Включает или выключает механихм определения и игнорирования "клонов" докуиентов. При включении, indexer будет определять копии документов, расположенных, например, на зеркалах, и не индексировать их повторно. Значение по умолчанию: yes. DetectClones no 3.6. Указание веб-пространства для индексированияКаждый раз когда indexer добавляет новую ссылку или выбирает очередную ссылку для индексирования, он сначала проверяет, задана ли в indexer.conf для этой ссылки команда Server, Realm или Subnet. Ссылки, не имеющие ни одной такой соответсвующей им команде не добавляются в базу, а если же такие ссылки уже находятся в базе данных (например, после удаления одной из команд Server, Realm или Subnet из файла indexer.conf), то они удаляются при очередной попытке их индексации. Эти команды имеют один обязательный параметр <команда> [method] [subsection] [CaseType] [MatchType] [CmpType] pattern [alias] Обязательный параметр Значение параметра
Необязательный параметр CaseType задаёт чувствительность к регистру при сравнении строк, может принимать значения case - нувствительное к регистру сравнение, и nocase - чувствительное сравнение. Необязятельный параметр CmpType узазывает тип сравнения
и может принимать значения Regex и String.
Типа сравнения String означает сравнение строкового шаблона и
используется по умолчанию. В параметре Realm http://*.ru/* Сравнение как регулярных выражений производится если указан параметр Realm Regex ^http://.*\.ru/ Необязательный параметр MatchType определяет тип совпадения. Для этого параметра могут указываться два значения: Match и NoMatch, по умолчанию используется значение Match. Команда Realm NoMatch имеет обратный эффект. Это обозначает, что URL, не попадающий под указанный pattern, будет соответствовать этой команде Realm. Например, используйте эту команду для индексирования любых документов, за исключением .com доменов: Realm NoMatch http://*.com/* Необязательный параметр Необязательный параметр
3.6.1. Команда Server Это основная команда в файле indexer.conf.
Она используется для описания веб-пространства для индексирования в виде серверов
и их частей, а также добавляет заданый URL, указанный в качестве обязательного параметра
Например, команда Server http://localhost/ разрешает индексировать документы сервера http://localhost/. Также, indexer вставляет документ с адресом http://localhost/ в базу данных. Вы также можете задать некоторый подкаталог для индексирования только части сервера: Server http://localhost/subsection/. И эта команда также добавляет аргумент в базу данных для использования его в качестве стартовой точки индексирования.
3.6.2. Команда RealmКоманда Realm обладает более гибкими возможностями указания веб-пространства для индексирования. Эта команда работает почти также как и команда Server, однако отличается от нее тем, что:
3.6.3. Команда Subnet Команда Subnet предоставляет другой способ задания веб-пространства для индексирования.
Она работает аналогично команде Server, с тем отличием, что указанный текстовый шаблон
сравнивается не с URL, а с IP-адресом, соответствующим проверяемому URL. Параметр Subnet 192.168.*.* Subnet 192.168.10.0/24 Вы можете использовать необязательный параметр Subnet NoMatch 195.*.*.* 3.6.4. Использование различным параметров для сервера и его подсекцийIndexer перебирает команды Server и Realm в том порядке, в каком они указаны в файле конфигурации. Таким образом, если Вы хотите задать различные параметры, например, для всего сервера и некоторых его подсекций, Вы должны добавить строки для секций до строк, относящихся к серверу целиком. Представим, что на Вашем сервере есть директория, содержащая страницы с новостями. Очевидно, эти страницы необходимо переиндексировать чаще, нежели остальные части содержимого сервера. Следующая последовательность команд может быть полезна в этом случае: # Add subsection Period 200000 Server http://servername/news/ # Add server Period 600000 Server http://servername/ Эти команды задают другой период переиндексирования для поддиректории /news/ в отличие от периода индексирования остального сервера. indexer выбирет первую команду Server для http://servername/news/page1.html т.к. это первая соответсвующая URL команда Server. 3.6.5. Использование indexer -f <filename>The third scheme is very useful for indexer -i -f url.txt running. You may maintain required servers in the url.txt. When new URL is added into url.txt indexer will index the server of this URL during next startup. 3.6.6. Команды ServerDB, RealmDB, SubnetDB и URLDBURLDB pgsql://foo:bar@localhost/portal/links?field=url Эти команды аналогичны командам Server, Realm, Subnet
и URLсоответственно, но аргументы для вставки в базу выбираются из указанного поля SQL-таблицы.
В примере выше ссылки выбираются из базы 3.6.7. Команда URLURL http://localhost/path/to/page.html Эта команда добавляет указаный URL в базу. Это полезно когда нужно добавить несколько стартовых точек для одного сервера. Не имеет эффекта, если указываемый URL уже находится в базе. 3.7. АлиасыВстроенная в DataparkSearch поддержка алиасов дает возможность индексировать сайты, беря информацию для индексации из альтернативного источника данных. Например, при индексации локального веб-сервера можно выбирать страницы напрямую с жесткого диска без использования веб-сервера и сетевых протоколов. Либо, например, можно для индексации какого-либо сайта использовать не его основной адрес, а его более быстрое зеркало. 3.7.1. Команда Alias (из indexer.conf)Формат команды "Alias" indexer.conf: Alias <главныйURL> <вторичныйURL> Например, для индексации http://search.mnogo.ru/ с использованием ближайшего зеркала http://www.gstammw.de/mirrors/mnoGoSearch/ нужно добавить следующие строки в indexer.conf: Server http://search.mnogo.ru/ Alias http://search.mnogo.ru/ http://www.gstammw.de/mirrors/mnoGoSearch/ search.cgi будет указывать ссылки с главного сайта http://search.mnogo.ru/, но индексатор будет брать данные с зеркала http://www.gstammw.de/mirrors/mnoGoSearch/. Другой пример. Допустим, вы хотите индексировать весь домен udm.net. И один из серверов этого домена, http://home.udm.net/, расположен на локальном диске в каталоге /home/httpd/htdocs/. Чтобы это настроить нужно добавить следующее: Realm http://*.udm.net/ Alias http://home.udm.net/ file:/home/httpd/htdocs/ Индексатор скачает home.udm.net с локального диска,а другие сайты скачает по HTTP. 3.7.2. Алиасы для различных частей сервераАлиасы просматриваются в порядке их появления в indexer.conf. Таким образом можно создавать алиасы для сервера и для отдельных его частей: # Первое - создадим алиас для каталога /stat/ , который физически находится # не на ожидаемом месте по умолчанию: Alias http://home.udm.net/stat/ file:/usr/local/stat/htdocs/ # Затем создадим алиас для всего остального сервера: Alias http://home.udm.net/ file:/usr/local/apache/htdocs/
3.7.3. использование алиасов в команде ServerВозможно указание расположения данных для выборки индексером используя дополнительный аргумент команды Server: Server http://home.udm.net/ file:/home/httpd/htdocs/ 3.7.4. Использование алиасов в команде RealmАлиасы в команде Realm command являются очень мощным
инструментом при использовании регулярных выражений. Результат работы такой команды
подобен работе функции PHP
Синтаксис 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 целиком) Затем индексатор построит алиас используя $2 and $4 ссылки: file:/home/john/htdocs/news/index.html и использует этот результат для получения документа. 3.7.5. Команда AliasProgAliasProg - еще одна команда для построения алиасов. Иногда альтернативное расположение документов на локальном диске может быть слишком сложным, чтобы описать его с помощью команд Alias или Realm. AliasProg - это внешняя исполняемая программа, которая принимает в качестве аргумента URL, и возвращает его алиас на STDOUT. Используйте $1 чтобы передать значение URL. Например, эта команда использует программу replace из дистрибутива MySQL для замены подстроки http://www.apache.org/ на подстроку file:/usr/local/apache/htdocs/: AliasProg "echo $1 | /usr/local/mysql/bin/mysql/replace http://www.apache.org/ file:/usr/local/apache/htdocs/" 3.7.6. Команда ReverseAliasКоманда ReverseAlias позволяет видоизменить URL документа сразу же после того, как найдена ссылка на него. ReverseAlias http://name2/ http://name2.yourname.com/ Server http://name2.yourname.com/ В это примере все ссылки с коротким именем сервера будут преобразованы в ссылки с полным именем сервера. Это произойдет сразу же после обнаружения "короткой" ссылки, а в базу данных попадет документ с уже длинным именем сервера в адресе. Еще одно возможное применение команды ReverseAlias - это вырезание различных ненужных кусков адреса, например PHPSESSION=XXXX. Например, для вырезания параметра PHPSESSION из URL типа http://www/a.php?PHPSESSION=XXX, если PHPSESSION - единственный параметр, будет выглядеть так (знак ? будет вырезан тоже): ReverseAlias regex (http://[^?]*)[?]PHPSESSION=[^&]*$ $1 Чтобы вырезать PHPSESSION, когда он является первым параметром, при условии, что после него следуют другие параметры, т.е. http://www/a.php?PHPSESSION=xxx&.., используйте эту команду: ReverseAlias regex (http://[^?]*[?])PHPSESSION=[^&]*&(.*) $1$2Знак '&' после аргумента PHPSESSION будет вырезан, а знак вопроса не будет. Для вырезания из URL типа http://www/a.php?a=b&PHPSESSION=xxx или http://www/a.php?a=b&PHPSESSION=xxx&c=d, где PHPSESSION не является первым параметром, используйте ReverseAlias regex (http://.*)&PHPSESSION=[^&]*(.*) $1$2Знак '&' перед PHPSESSION будет тоже вырезан. 3.7.7. Команда ReverseAliasProgReverseAliasProg - команда, аналогичная обеим командам AliasProg и ReverseAlias. Она получает параметры аналогично команде AliasProg, но преобразовывет URL перед вставкой в базу, аналогично команде ReverseAlias. 3.7.8. Алиасы в search.htmВы также можете использовать алиасы и в search.htm. Команда Alias в search.htm аналогична такой же команде в indexer.conf, но работате во время поиска, а не во время индексации. Синтаксис команды также аналогичен команде в indexer.conf: Alias <find-prefix> <replace-prefix> Например, пусть в search.htm есть такая команда: Alias http://localhost/ http://www.mnogo.ru/ Пусть поиск вернул страницу с адресом http://localhost/news/article10.html В результате, появится переменная $(Alias), которую значение которой будет равным http://www.mnogo.ru/news/article10.html 3.8. ServerTableDataparkSearch поддерживает команду ServerTable в indexer.conf. 3.8.1. Загрузка таблицы серверовКогда задана команда ServerTable mysql://user:pass@host/dbname/tablename[?srvinfo=infotablename], indexer будет загружать информацию о серверах из указаной SQL таблицы tablename, а параметры этих серверов из таблицы infotablename. Если параметр srvinfo не указан, параметры загружаются из таблицы с именем srvinfo. См. структуру этих таблиц в файле create/mysql/create.txt. Если для вашей базы данных нет соответсвующего скрипта со структурой этой таблицы, возьмите этот файл в качестве образца. Вы можете использовать несколько команд ServerTable для загрузки информации о серверах из различных таблиц. 3.8.2. Структура таблицы серверовТаблица серверов содержит поля для описания всех необходимых параметров серверов. Имена полей соответсвуют командам в indexer.conf. Например, поле period соответсвует команде Period в indexer.conf. Значения полей по умолчанию равны значениям по умолчанию соответсвующих параметров из indexer.conf. Поле gindex соответсвует команде Index. Имя слегка изменено во избежания использования зарезервированного в SQL имени. Зачения некоторых полей расшифрованы в Разд. 9.3>.
3.8.3. Команда FlushServerTableСбрасывает server.enabled в неактивное состояние для всех записей таблицы серверов. Используйте эту команду для деактивирования всех команд в таблице серверов перед загрузкой новых из indexer.conf или из другой таблицы серверов. 3.9. Внешние парсерыDataparkSearch indexer может использовать внешние парсеры для различных типов файлов (MIME types). Парсер - это программа, которая конвертирует один из типов файла (mime type) в text/plain или text/html. Например, если у вас есть PostScript файлы, Вы можете использовать парсер (фильтр) ps2ascii, читающий из stdin PostScript файл и выдающий текст в ascci на stdout. 3.9.1. Поддерживаемые типы парсеровIndexer поддерживает четыре типа парсеров, такие что:
3.9.2. Установка парсеров
3.9.3. Воизбежание зависания парсера при выполненииВоизбежание подвисания парсера при выполнении Вы можете указать в Вашем файле indexer.conf число времени в секундах, отводимое на работу парсеру, при помощи команды ParserTimeOut. Напрмиер: ParserTimeOut 600 Значение по умолчанию - 300 секунд, т.е. 5 минут. 3.9.4. Конвееры в командных строках парсеровВы можете использовать конвееры в командных строках парсеров. Например, следующие строки необходимы при индексировании загнузипленых страниц man на локальном диске: AddType application/x-gzipped-man *.1.gz *.2.gz *.3.gz *.4.gz Mime application/x-gzipped-man text/plain "zcat | deroff" 3.9.5. Кодировки и парсерыНекоторые парсеры могут выдавать результат в кодировке, отличной от указанной в команда LocalCharset. Указание кодировки парсера даёт возможность indexer перекодировать результат в нужную кодировку. Например, если catdoc сконфигурирован на вывод результата в windows-1251, а в LocalCharset указана кодировка koi8-r, используйте следующую команду для парсера документов MS Word: Mime application/msword "text/plain; charset=windows-1251" "catdoc -a $1" 3.9.6. Переменная окружения DPS_URLПри выполнении парсера, indexer создаёт переменную окружения DPS_URL, содержащую URL обрабатываемого документа. Вы можете использовать эту переменную в Ваших скриптах парсеров. 3.9.7. Некоторые внешние парсеры
Пожалуйста, присылайте Ваши скрипты и конфигурации для новых парсеров на адрес
3.9.8. Библиотека libextractorDataparkSearch может быть собран с библиотекой 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 и именами секций DataparkSearch: Таблица 3-1. Соответствие между типами keyword библиотеки libextractor и именами секций DataparkSearch
Если секция из списка выше не указана в файле sections.conf, значение ключевого слова соответствующего типа будет записано как секция 3.10. Остальные команды, используемые в indexer.conf3.10.1. Команда IncludeВы можете включить другой конфигурационный файл в любом месте файла indexer.conf при помощи команды Include <filename>. Путь считается абсолютным, если <filename> начинается с "/": Include /usr/local/dpsearch/etc/inc1.conf В противном случае пусть считается относительным: Include inc1.conf 3.10.2. Команда DBAddrКоманда DBAddr является описание хранилища данных в URL-подобном стиле. Она определяет параметры (тип, хост, имя базы данных, порт, имя пользователя и пароль и т.д.) для соединения с SQL-сервером или другим хранилищем данных. Может быть задано несколько хранилищ данных. Но все команды DBAddr должны быть указаны первыми в файле конфигурации, до любой другой команды. Формат команды: DBAddr <DBType>:[//[DBUser[:DBPass]@]DBHost[:DBPort]]/DBName/[?[dbmode=mode]{&<имя параметра>=<значение параметра>}]
Вы можете использовать URL-кодирование для На данный момент поддерживаются следующие значения Пользователи MySQL и PostgreSQL могут указывать путь до Unix-сокета при соединении с localhost: mysql://foo:bar@localhost/dpsearch/?socket=/tmp/mysql.sock Если вы используете PostgreSQL и не указываете имя хоста, т.е. pgsql://user:password@/dbname/ в этом случае PostgreSQL не будет работать по TCP, а будет использовать стандартный Unix-сокет. Параметр dbmode.
Вы также можете указать способ хранения слов.
Если указан " Параметр 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-переменную
Пример: DBAddr mysql://foo:bar@localhost/search/?dbmode=single 3.10.3. Команда VarDirВы можете задать альтернативную директорию для данных способа хранения cache и данных stored: VarDir /usr/local/dpsearch/var 3.10.4. Команда NewsExtensionsВключает расширенную поддержку групп новостей. Значение по умолчанию no. NewsExtensions yes 3.10.5. Команда SyslogFacilityМожет быть использована, если Datapark был скомпилировал с поддержкой syslog и вы хотите изменить значение по умолчанию. Задаваемое значение должно быть одним из описаных в файле syslog.conf. См. syslog.conf(5). SyslogFacility local7 3.10.6. Команды указания длины словаВы можете указать диапазон длин слов, сохраняемых в базе. По умолчанию, сохраняются слова длиной от 1 до 32 символов. MinWordLength 1 MaxWordLength 32 3.10.7. Команда MaxDocSizeЭта команда служит для указания максимального размера документа. Значение по умалчанию: 1048576 (1 Mb). Имеет глобальный эффект. MaxDocSize 1048576 3.10.8. Команда MinDocSizeДанная команда включает режим только проверки наличия (CheckOnly) для документов размером менее указанного. Значение по умолчанию: 0. Имеет глобальный эффект. MinDocSize 1024 3.10.9. Команда IndexDocSizeLimitИспользуйте эту команду для задания максимального размера данных, записываемых в индекс для одного документа. Значение по умолчанию: 0. Это обозначает без ограничений. Команда действует до следующей команды IndexDocSizeLimit. IndexDocSizeLimit 65536 3.10.10. Команда URLSelectCacheSizeЗадаёт число документов отбираемых для индексации за раз. Значение по умолчанию: 1024. URLSelectCacheSize 10240 3.10.11. Команда URLDumpCacheSizeЗадаёт число документов отбираемых за раз для записи индексов cache mode, загрузки данных в searchd или для расчёта индекса популярности. Значение по умолчанию: 100000. URLDumpCacheSize 10240 3.10.12. Команда UseCRC32URLIdВключает или выключает генерацию ID для URL используя алгоритм HASH32. Значение по умолчанию: "no". UseCRC32URLId yes 3.10.13. Команда HTTPHeaderВы можете добавить свои собсвенные заголовки в запрос HTTP на получение документов к индексации. Вы не можете вказывать таким образом заголовки "If-Modified-Since" или "Accept-Charset", эти заголовки формируются indexerом самостоятельно. Заголовок "User-Agent: DataparkSearch/version" также формируется самостоятельно, но вы можете заменить его. Command has global effect for all configuration file. HTTPHeader "User-Agent: My_Own_Agent" HTTPHeader "Accept-Language: ru, en" HTTPHeader "From: webmaster@mysite.com" 3.10.14. Команда AllowAllow [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ] Данная команда разрешает к индексирования URL, подпадающие под указаный шаблон.
Первые три необязательных параметра задают тип сравнения.
Значения по умолчанию: Match, NoCase, String.
Используйте Примеры # Разрешить всё: Allow * # Разрешить всё, исключая расширения .php .cgi .pl не учитывая регист и используя регулярные выражения: Allow NoMatch Regex \.php$|\.cgi$|\.pl$ # Разрешить расширение .HTM учитывая регистр: Allow NoCase *.HTM 3.10.15. Команда DisallowDisallow [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ] Данная команда запрещает к индексирования URL, подпадающие под указаный шаблон. Значение первых трёх необязательных параметров такое же как и у команды Allow Вы можете указывать несколько аргументов для одной команды Disallow. Имеет глобальный эффект. Примеры: # Disalow URLs that are not in udm.net domains using "string" match: Disallow NoMatch *.udm.net/* # Disallow any except known extensions and directory index using "regex" match: Disallow NoMatch Regex \/$|\.htm$|\.html$|\.shtml$|\.phtml$|\.php$|\.txt$ # Exclude cgi-bin and non-parsed-headers using "string" match: Disallow */cgi-bin/* *.cgi */nph-* # Exclude anything with '?' sign in URL. Note that '?' sign has a # special meaning in "string" match, so we have to use "regex" match here: Disallow Regex \? 3.10.16. Команда CheckOnlyCheckOnly [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ] Значение первый трёх необязательных параметров такое же, как и у команды Allow. Для URL, подпадающих под эту команду, вместо HTTP метода GET indexer будет использовать метод HEAD. Это означает, что будет проверятся только наличие документа, сам же документ скачиваться и индексироваться не будет. Это полезно для zip,exe,arj и других двоичных файлов, например, для организации поиска по имени файла (что-то наподобии ftp-поиска). Вы можете задавать несколько аргументов для одной команды CheckOnly. Имеет глобальный эффект. Примеры: # Check some known non-text extensions using "string" match: CheckOnly *.b *.sh *.md5 # or check ANY except known text extensions using "regex" match: CheckOnly NoMatch Regex \/$|\.html$|\.shtml$|\.phtml$|\.php$|\.txt$ 3.10.17. Команда HrefOnlyHrefOnly [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ... ] Значение первый трёх необязательных параметров такое же, как и у команды Allow. Используйте эту команду для поиска ссылок в указанных URL. Содержимое самих файлов не индексируется. Команда имеет глобальный эффект. Например, при индексировании почтовых архивов, индесные страницы (типа mail.10.html, thread.21.html, etc.) будут сканировать для поиска ссылок на страницы с письмами, но не будут индексироваться: HrefOnly */mail*.html */thread*.html 3.10.18. Команда CheckMp3CheckMp3 [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...] Значение первый трёх необязательных параметров такое же, как и у команды Allow. Если URL подпадает под эту команду, то indexer скачает небольшую порцию этого документа и попробует найти тэги MP3 в этом фрагменте. При обнаружении, тэги будут проиндексированы. В противном случае, документ будет скачен целиком и обработан в обычном порядке. Замечание: это работает только для серверов, поддерживающих HTTP/1.1, т.е. используется заголовок "Range: bytes". CheckMp3 *.bin *.mp3 3.10.19. Команда CheckMp3OnlyCheckMP3Only [Match|NoMatch] [NoCase|Case] [String|Regex] <arg> [<arg> ...] Эта команда аналогична команде CheckMP3, за исключением: если тэги MP3 не будут обнаружены, документ не скачивается целиком и не обрабатывается. CheckMP3Only *.bin *.mp3 3.10.20. Команда IndexIfIndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ] Эта команда служит для разрешения индексирования при совпадении шаблона Пример IndexIf regex Title Manual IndexIf body "*important detail*" 3.10.21. Команда NoIndexIfNoIndexIf [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ] Эта команда служит для запрещения индексирования при совпадении шаблона Пример NoIndexIf regex Title Sex IndexIf body *xxx* 3.10.22. Команда HoldBadHrefsHoldBadHrefs <time> Задаёт сколько времени хранить документы с ошибочными кодами статуса перед удалением их из базы. Например, если какой-либо веб-сервер временно недоступен, indexer не удалит страницы этого сервера сразу. Однако, если этот сайт будет недоступен продолжительное время, страницы с этого сайта будут удалены по истечении указаного интервала времени. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.26>. HoldBadHrefs 30d 3.10.23. Команда DeleteOlderDeleteOlder <time> Задаёт сколько времени хранить проиндексированные документы в базе. Например, при индексировании новостных сайтов, вы можете задать период, по истечении которого устаревшие страницы новостей будут удалены из базы, независимо от статуса этих документов. Формат для параметра <time> см. в описании команды Period в Разд. 3.10.26>. Значение по умолчанию: 0, - означает "не проверять". Вы можете указать несколько команд DeleteOlder, например, по одной для каждой команды Server. DeleteOlder 7d 3.10.24. Команда UseRemoteContentTypeUseRemoteContentType yes/no Данная команда указывает брать ли тип содержимого из заголовков ответа сервера (yes) или определять его на основании комманд AddType, указанных в файле конфигурации (no). Если задано 'no' и по заданым командам AddType определить тип не удаётся, то используется тип из заголовков ответа сервера. Значение по умолчанию: yes. UseRemoteContentType yes 3.10.25. Команда AddTypeAddType [String|Regex] [Case|NoCase] <mime type> <arg> [<arg>...] Эта команда ассоциирует MIME тип с указаным расширением файла. Эти команды используются при индексировании ссылок со схемой file://. Первые два необязательных параметра используются для задания типа сравнения. По умолчанию используются "String" "NoCase" (нечувствительное к регистру стравнение строк с использованием символов-шаблонов '?' и '*'). AddType image/x-xpixmap *.xpm 3.10.26. Команда PeriodPeriod <time> Задаёт период переиндексирования. <time> указывается в формате 'xxxA[yyyB[zzzC]]' (пробелы допустимы между xxx и A и yyy и т.д) здесь xxx, yyy, zzz - числа (возможно отризательные!) A, B, C могут быть одним из следующего: s - секунда M - минута h - час d - день m - месяц y - год (эти символы такие же как и для функций strptime/strftime). Примеры: 15s - 15 секунд 4h30M - 4 часа и 30 минут 1y6m-15d - 1 год и шесть месяцев минус 15 дней 1h-10M+1s - 1 час минус 10 минут плюс 1 секунда Если указано только число без какого-либо символа, то подразумевается, что время задано в секундах. Можно задавать несоклько команд Period, например по одной на каждую команду Server. Period 7d 3.10.27. Команда PeriodByHopsPeriodByHops <hops> [ <time> ] Задаёт период переиндексирования для страниц зо значением глубины в "мышиных кликах" равным <hops>. Формат для <time> такой же как и для команды Period. Можно задавать несоклько команд PeriodByHops, например по одной на каждую команду Server. Если параметр <time> опущен, действие указаного ранее значения отменяется. Если для конретного значения <hops> не задан период переиндексирования командой PeriodByHops, в этом случае используется значение, заданное командой Period. 3.10.28. Команда ExpireAtExpireAt [ A [ B [ C [ D [ E ]]]]] Эта команда позволяет задать точное время устаревания документов. Может задаваться для каждой команда Server/Realm в отдельности, действует до конца файла конфигурации или до следующей команды ExpireAt. ExpireAt указаная без аргументов означает отмену всех ранее указаных значений. A - обозначает минуту, может быть * или 0-59; B - обозначает час, может быть * или 0-23; C - обозначает день месяца, может быть * или 1-31; D - обозначает месяц, может быть * или 1-12; E - обозначает день недели, может быть * или 0-6, 0 - Воскресенье. Команда ExpireAt имеет больший приоритет над командами Period или PeriodByHops. 3.10.29. Команда UseDateHeaderUseDateHeader yes|no Использовать ли заголовок ответа сервера Date если в ответе сервера не содержится заголовок Last-Modified. Значение по-умолчанию: no. 3.10.30. Команда TagTag <string> Используйте эту команду по своему усмотрению чтобы сгруппировать несколько сайтов, помечая их указаным тэгом. При индексировании или поиске, вы можете ограничиваться сайтами только указаного тэга. Можно указывать несколько команд Tag. Команда Tag имеет значение до следующей команды Tag или до конца файла конфигурации. Значение по умолчанию: пустая строка. 3.10.31. Команда TagIfTagIf <tag> [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ] Присвоить документу тэг <tag>, если значении секции Пример TagIf Docs regex Title Manual 3.10.32. Команда CategoryCategory <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 3.10.33. Команда CategoryIfCategoryIf <category> [Match|NoMatch] [NoCase|Case] [String|Regex] <section> <arg> [<arg> ... ] Присвоить документу категорию <category>, если значение секции Пример CategoryIf 010F regex Title "JOB ID" 3.10.34. Команда MaxHopsMaxHops <number> Максимальная глубина пути в "мышиных кликах" от начального URL. Значение по умолчанию: 256. Может быть задано несколько команд MaxHops, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHops. MaxHops 256 3.10.35. Команда TrackHopsTrackHops yes|no Включает или выключает ведение счётчика hops при переиндексировании. Значение по умолчанию: no (выключено). Если включено, то при переиндексировании значение hops для url вычисляется заново, иначе значение hops вычисляется один раз при помещении url в базу. TrackHops yes 3.10.36. Команда MaxDepthMaxDepth <number> Максимальная глубина директории в url. Значение по умолчанию 16. Может быть задано несколько команд MaxDepth, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDepth. MaxDepth 2 3.10.37. Команда MaxDocsPerServerMaxDocsPerServer <number> Ограничивает число документов, выкачиваемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет проиндексировано не более указанного числа документов, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxDocsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxDocsPerServer. MaxDocsPerServer 100 3.10.38. Команда MaxHrefsPerServerMaxHrefsPerServer <number> Ограничивает число ссылок, собираемых с одного Server. Значение по умолчанию: -1, что обозначает "без ограничений". Если задано неотрицательное значение, за один запуск indexer будет собирать не более указанного числа ссылок, относящихся к одной команда Server или Realm. Может быть задано несколько команд MaxHrefsPerServer, например, по одной на каждую команду Server. Действует до конца файла конфигурации, либо до следующей команды MaxHrefsPerServer. MaxHrefsPerServer 100 3.10.39. Команда MaxNetErrorsMaxNetErrors <number> Задаёт максимальное число сетевых ошибок для каждого сервера. Значение по умолчанию: 16. Используйте значение 0 для выключения проверки. Если число ошибок при обращении к какому-то серверу превысит заданое число (например, хост временно не доступен), indexer больше небудет пытаться получить документы с этого сервера. Команда действует до конца файла конфигурации, или до следующей команды MaxNetErrors. MaxNetErrors 16 3.10.40. Команда ReadTimeOutReadTimeOut <time> Таймаут ожидания соединения или продолжения получения данных.
Формат ReadTimeOut 30s 3.10.41. Команда DocTimeOutDocTimeOut <time> Указывает максимальное время ожидания получения всего документа.
Формат DocTimeOut 1m30s 3.10.42. Команда NetErrorDelayTimeNetErrorDelayTime <time> Указывает период, на который будет отложена обработка документа при возникновении сетевых ошибок при его получении.
Формат NetErrorDelayTime 1d 3.10.43. Команда CookiesCookies yes/no Включает поддерку ключиков HTTP (HTTP cookies). Команда действует до конца файла, или до следующей команды Cookies. Значение по умолчанию: no. Cookies yes 3.10.44. Команда RobotsRobots yes/no Разрешает или запрещает использование robots.txt и <META NAME="robots" ...>
для исключения страниц. Используйте Robots yes 3.10.45. Команда RobotsPeriodПо умолчанию, данные из robots.txt хранятся в SQL-базе одну неделю. Вы можете изменить этот период используя команду RobotsPeriod: RobotsPeriod <time>См. формат <time> в описании команды Period из Разд. 3.10.26>. RobotsPeriod 30d 3.10.46. Команда CrawlDelayИспользуйте эту команду для задания периода в секундах между последовательными запросами к одному и тому же серверу. Аналогична команде crawl-delay в файле robots.txt, но может быть задана в indexer.conf файле для каждого сервера в отдельности. Если не задано значение crawl-delay value в robots.txt, используется значение, указаное в CrawlDelay. Если значение crawl-delay указано в robots.txt, тогда используется максимальное значение из CrawlDelay и crawl-delay. 3.10.47. Команда SectionSection <string> <number> <maxlen> [strict] [ <pattern> <replacement> ] где Вы можете указать параметр # Standard HTML sections: body, title Section body 1 256 Section title 2 128 # строгая токенизация для URL Section url 3 0 strict # шаблон регулярного выражения для секции Section GoodName 3 128 "<h1>([^<]*)</h1>" "<b>GoodName:</b> $1" 3.10.48. Команда HrefSectionHrefSection <string> [ <pattern> <replacement> ] где # Standard HTML sections: body, title HrefSection link HrefSection NewLink "<newlink>([^<]*)</newlink>" "$1" 3.10.49. Команда FastHrefCheckКоманда "FastHrefCheck yes" полезна для ускорения индексирования, если ваш список команд Server/Realm/Subnet огромен, т.к. она выключает проверку ссылок по списку серверов на этапе парсинга страницы. 3.10.50. Команда IndexIndex yes/no Разрешает или запрещает сохранения проиндексированных слов в базу. Применяется, например, при проверке ссылок на страницах сайта или сайтов. Команда действует до конца файла, или до следующей команды Index. Значение по умолчанию: yes. Prevent indexer from storing words into database. Index no 3.10.51. Команда ProxyAuthBasicProxyAuthBasic login:passwd Задаёт http proxy basic authorization. Может быть указана перед каждой командой Server, но действует только для этой команды!. Может также использовать перед командой Proxy. Примеры: ProxyAuthBasic somebody:something 3.10.52. Команда ProxyProxy your.proxy.host[:port] Вместо прямого соединения, использовать прокси-соединение. Значение номера порта по умолчанию: 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 # Disable proxy (direct connect): Proxy 3.10.53. Команда AuthBasicAuthBasic login:passwd Включает использование basic http authorization. Может быть указана перед каждой командой Server, но действует только для этой команды!. Примеры: AuthBasic somebody:something # If you have password protected directory(ies), but whole server is open,use: AuthBasic login1:passwd1 Server http://my.server.com/my/secure/directory1/ AuthBasic login2:passwd2 Server http://my.server.com/my/secure/directory2/ Server http://my.server.com/ 3.10.54. Команда ServerWeightServerWeight <number> Задаёт вес Server для расчёта Popularity Rank (см. Разд. 8.5.3>). Значение по умолчанию: 1. ServerWeight 1 3.10.55. Команда OptimizeAtUpdateOptimizeAtUpdate yes Задаёт стратегию оптимизации индекса слов. Значение по умолчанию: no. Если включено, позволяет экономить дисковое пространство, однако замедляет процесс индексирования. Может указываться и в indexer.conf и в cached.conf. 3.10.56. Команда SkipUnreferredSkipUnreferred yes|no|del Значение по умолчанию: no. Используйте эту команду для пропуска переиндексации или для удаления документов, на которые никто не ссылается. Для этой команды требуется включить сбор ссылок (см. Разд. 8.5.3>). 3.10.57. Команда BindBind 127.0.0.1 Если ваша система имеет несколько сетевых интерфейсов, вы можете используйте эту команду для задания локального ip адреса. 3.10.58. Команда ProvideRefererProvideReferer yes Используйте эту команду для передачи заголовка запроса Referer: для HTTP и HTTPS соединений. 3.10.59. Команда LongestTextItemsLongestTextItems 4 Используйте эту команду для указания числа самых длинных текстовых элементов к индексированию. 3.10.60. Команда MakePrefixesПри помощи команды MakePrefixes yes вы можете указать indexer автоматически создавать префиксы для всех индексируемых слов. В частности, это можно использовать при создании поисковых подсказок. 3.11. Расширенные возможности индексирования3.11.1. Индексирование таблиц SQL баз данных (виртуальная URL схема htdb:)DataparkSearch позволяет индексировать текстовые поля SQL баз данных используя так называемую виртуальную URL схему htdb:. Используя виртуальную URL схему htdb:/ вы можете создать полный индекс текстовых полей вашей SQL базы данных, а также вашего WWW сервера, использующего SQL для хранения информации.
3.11.1.1. HTDB команды в indexer.confДля поддержки HTTDB в indexer.conf используются пять команд: HTDBAddr, HTDBList, HTDBLimit, HTDBDoc и HTDBText. Команда HTDBAddr служит для описания соединения с базой данных, таблицу или таблицы которой вы собираетесь индексировать. Её систаксис совпадает с синтаксисом команды DBAddr. HTDBList - это SQL запрос генерирования списка всех URL, соответсвующих записям в таблице по полю PRIMARY индекса. В команде HTDBList вы можете использовать и относительные и абсолютные URL. Например: HTDBList "SELECT concat('htdb:/',id) FROM messages"
или
HTDBList "SELECT id FROM messages"Команда HTDBLimit задаёт максимальное число записей, считываемых из базы за один раз. Это позволяет избежать черезмерного использования памяти при индексировании больших таблиц. Пример: HTDBLimit 512 HTDBDoc - это запрос для получения из базы записи, определенной по первичному ключу. SQL запрос HTDBList используется для все URL, заканчивающихся символом '/'. Для остальных URL используется SQL запрос из HTDBDoc.
Если по запросу HTDBDoc не будет найдено ни одной записи, система выборки HTDB сгенерирует ответ "HTTP 404 Not Found". Это может произойти при переиндексировании, если запись была удалена из вашей базы данных с момента предыдущего индексирования. Вы можете использовать команду HoldBadHrefs 0 для удаления информации о таких записях и из таблиц DataparkSearch. Вы можете использовать несколько команд HTDBDoc/List в одном файле indexer.conf с различными соответсвующими им командами Server. HTDBText <section> - это запрос для получения из базы простого текста, соответсвующего первичному ключу, полученному при помощи команды HTDBList. Параметр <section> задаёт имя секции, под которой этот текст будет индексироваться. Такой запрос может возращать несколько строк с данными, если это необходимо. Вы можете указать несколько команд HTDBText для каждой команды Server или Realm. DBAddr mysql://foo:bar@localhost/database/?dbmode=single HTDBAddr mysql://foofoo:barbar@localhost/database/ HTDBList "SELECT DISTINCT topic_id FROM messages" HTDBText body "SELECT raw_text\ FROM messages WHERE topic_id='$1'" Server htdb:/ Возможно задавать одновременно обе команды HTDBDoc и HTDBText для одной команды Server или Realm. В этом случае сначала обрабатываются команды HTDBText. 3.11.1.2. Переменные HTDBВы можете использовать части пути в URL в качестве параметров для обоих SQL запросов HTDBList и HTDBDoc. Все части используются как $1, $2, ... $n, где число n - число поддиректорий в пути: htdb:/part1/part2/part3/part4/part5/
$1 $2 $3 $4 $5Например, пусть в indexer.conf указана команду: HTDBList "SELECT id FROM catalog WHERE category='$1'" При использовании URL htdb:/cars/, $1 будет заменено на 'cars': SELECT id FROM catalog WHERE category='cars' Вы можете использовать длинные URL при передаче нескольких параметров для обоих SQL запросов HTDBList и HTDBDoc. Например, htdb:/path1/path2/path3/path4/id с запросом: HTDBList "SELECT id FROM table WHERE field1='$1' AND field2='$2' and field3='$3'" Это запрос создаст списое таких URL: htdb:/path1/path2/path3/path4/id1 ... htdb:/path1/path2/path3/path4/idN для всех значений поля id в результате выполенния запроса HTDBList. 3.11.1.3. Создание текстового индексаИспользуя схему htdb:/ вы можете создать текстовый индекс и использовать его в ваших приложениях. Предположим, у вас есть большая SQL таблица, в которой хранятся, например, сообщения электронной доски объявлений в текстовом формате. И пусть вы хотите создать приложение, обладающее возможностью поиска среди этих объявлений. Допустим, сообщения храняться в таблице messages с двумя полями id, используемом в качестве первичного ключа, и msg, в котором собственно и храняться тексты объявлений. Поиск при помощи SQL LIKE операции может занять слишком много времени: SELECT id, message FROM message WHERE message LIKE '%someword%' Используя DataparkSearch вы можете создать текстовый индекс по таблице message. Установите DataparkSearch обычным образом. Затем отредактируйте ваш indexer.conf: DBAddr mysql://foo:bar@localhost/database/?dbmode=single HTDBAddr mysql://foofoo:barbar@localhost/database/ HTDBList "SELECT id FROM messages" HTDBDoc "SELECT concat(\ 'HTTP/1.0 200 OK\\r\\n',\ 'Content-type: text/plain\\r\\n',\ '\\r\\n',\ msg) \ FROM messages WHERE id='$1'" Server htdb:/ После запуска indexer вставить URL 'htdb:/' в базу и выполнит SQL запрос, указанный в HTDBList. В результате вы получим значения 1,2,3, ..., N. Эти значения будут рассматриваться как ссылки относительно URL 'htdb:/'. Список новый URL в виде htdb:/1, htdb:/2, ... , htdb:/N будет добавлен в базу. Затем SQL запрос HTDBDoc будет выполнен для каждого из вновь добавленных URL. HTDBDoc создаст HTTP документ в виде: HTTP/1.0 200 OK Content-Type: text/plain <some text from 'message' field here> Этот документ будет использован для создания текстового индекса по словам из полей 'message'. Слова будут сохранены в таблице 'dict' (предполагая, что используется способ хранения 'single'). После индексирования, вы можете использовать для поиска таблицы DataparkSearch: SELECT url.url FROM url,dict WHERE dict.url_id=url.rec_id AND dict.word='someword'; Так как таблица 'dict' имеет индекс по полю 'word', этот запрос будет выполнен быстрее, нежели запрос с использованием SQL LIKE оператора при запросе по таблице 'messages'. Вы также можете задать несколько слов при поиске: SELECT url.url, count(*) as c
FROM url,dict
WHERE dict.url_id=url.rec_id
AND dict.word IN ('some','word')
GROUP BY url.url
ORDER BY c DESC;
Оба запроса вернут значения 'htdb:/XXX' в поле urll.url. Ваше приложение может отбросить 'htdb:/' для получения значения первичного ключа таблицы 'messages'. 3.11.1.4. Индексирование веб-сервера, использующего SQL базу данныхВы можете также использовать виртуальную схему htdb:/ для индексирования вашего веб-сервера, использующего базу данных для хранения отображаемой информации, без обращения к веб-серверу при индексировании. Т.е. намного быстрее и используя меньше ресурсов процессора нежели индексируя обращаясь к веб-серверу. Основная идея похожа на создание текстового индекса, за исключением того, что поиск должен давать реальные URL вместо URL в виде 'htdb:/...'. Это достигается при помощи механизма алиасов DataparkSearch. Команда HTDBList создаёт URL в форме: http://search.mnogo.ru/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.mnogo.ru/board/message.php?id=* Alias http://search.mnogo.ru/board/message.php?id= htdb:/ Первая команда указывает indexer выполнить запрос HTDBList, который сгенерирует список сообщений в виде: http://search.mnogo.ru/board/message.php?id=XXX Вторая команда позволяет indexer принимать такие URL сообщений. Третья команда заменяет в URL подстроку "htdb:/" на подстроку "http://search.mnogo.ru/board/message.php?id=" при получении документа с сообщением. Что обозначает, что URL в виде "http://mysearch.udm.net/board/message.php?id=xxx" будет показан в результате поиска, хотя при индексировании будет использован URL "htdb:/xxx", где xxx - значение первичного ключа, ID записи в таблице "messages". 3.11.2. Индексирование вывода программ (виртуальные схемы URL exec: и cgi:)DataparkSearch поддерживает виртуальные URL схемы exec: и cgi:, позволяющие запускать внешнюю программу. Эта программа должна выдавать результат своей работы в stdout. Результат должен быть оформлен по стандарту HTTP, т.е. заголовок ответа HTTP, а за ним содержимое документа. Например, при индексировании обоих cgi:/usr/local/bin/myprog и exec:/usr/local/bin/myprog, indexer будет выполнять программу /usr/local/bin/myprog. 3.11.2.1. Передача параметров для виртуальный схемы cgi:При выполнении программы по виртуальной схеме cgi:, indexer эмулирует выполнение из-под HTTP сервера. Он создаёт переменную окружения REQUEST_METHOD со значением "GET" и переменную QUERY_STRING в соответствии со стандартами HTTP. Например, при индексировании cgi:/usr/local/apache/cgi-bin/test-cgi?a=b&d=e indexer создаёт QUERY_STRING со значением a=b&d=e. Виртуальная URL схема cgi: позволяет индексировать ваш сайт без веб-сервера, даже если необходимо индексировать CGI скрипты. Например, если для вашего веб-сервера статические документы находятся в /usr/local/apache/htdocs/, а CGI скрипты в /usr/local/apache/cgi-bin/, используёте следующую конфигурацию: Server http://localhost/ Alias http://localhost/cgi-bin/ cgi:/usr/local/apache/cgi-bin/ Alias http://localhost/ file:/usr/local/apache/htdocs/ 3.11.2.2. Передача параметров для виртуальной схемы exec:indexer не создаёт переменной окружения QUERY_STRING как для схемы cgi:. Он создаёт командную строку с аргументами, указанными в URL после занка ?. Например, при индексировании exec:/usr/local/bin/myprog?a=b&d=e, будет выполнена слудующая команда с параметрами: /usr/local/bin/myprog "a=b&d=e" 3.11.2.3. Использование виртуальной URL схемы exec: в качестве внешней системы полученияВиртуальную URL схему exec: можно использовать в качестве внешней системы получения документов. Это позволяет использовать для получения документов протоколы, не поддерживаемые DataparkSearch. Например, можно испрользовать программу curl, доступную с http://curl.haxx.se/ для индексирования HTTPS сайтов. Поместите этот короткий скрипт в /usr/local/dpsearch/bin/ под именем curl.sh. #!/bin/sh /usr/local/bin/curl -i $1 2>/dev/null Этот скрипт берёт URL, указанный в качестве параметра командной строки и выполняет программу
curl для получения этого документа. Ключ Теперь вы можете использовать такие команды в вашем indexer.conf: Server https://some.https.site/ Alias https:// exec:/usr/local/dpsearch/etc/curl.sh?https:// При индексировании https://some.https.site/path/to/page.html, indexer преобразует этот URL в exec:/usr/local/dpsearch/etc/curl.sh?https://some.https.site/path/to/page.html выполнит скрипт curl.sh: /usr/local/dpsearch/etc/curl.sh "https://some.https.site/path/to/page.html" и получит его вывод для дальнейшей своей работы. 3.11.3. ЗеркалированиеВы должны указать путь к корневой директории для активации зеркалирования сайтов MirrorRoot /path/to/mirror Вы также можете указать корневую директорию для хранения заголовков зеркалируемых документов, в этом случае indexer будет также записывать на диск HTTP заголовки. MirrorHeadersRoot /path/to/headers Вы можете также указать период, в течении которого будут использоваться файлы из зеркала, вместо выкачивания оригинальных документов. MirrorPeriod <time> Зеркалирование очень полезно когда вы экспериментируете с индексированием
DataparkSearch одних и тех же хостов и не хотите создавать много трафика в/из интернета.
Если не задан <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 Если ваши страницы уже проиндексированы, и вы реиндексируете с ключом Вы можете использовать созданное зеркало как полноценное зеркало вашего сайта.
Тем не менее, обратите внимание: indexer не выкачивает документ, имеющий размер более
3.11.4. Сбор данныхИспользуя команду ActionSQL вы можете выполнять SQL-запросы с данными документа во время индексирования. Команда ActionSQL имеет следующий синтаксис: ActionSQL <section> <pattern> <sql-template> [<dbaddr>]где <section> - имя секции, содержимое которой будет проверяться на соответствие шаблону регулярного выражения <pattern>, если соответствие будет найдено, то будет заполнен шаблон sql-запроса <sql-template>, в котором наряду с мета-переменными регулярного выражения $1-$9 можно использовать и мета-переменные шаблона страницы выдачи (например, $(title), $(Last-Modified)). Заполненый sql-запрос будет выполнен в первом DBAddr, указанном в файле конфигурации, или в новом соединении с sql-базой, задаваемой необязательным параметром <dbaddr>. Таким образом, команда ActionSQL предназначена для поиска и сбора различной информации с индексируемых страниц. Например, следующая команда будет собирать в таблицу phonedata все найденные номера телефонов и заголовки страниц, на которых эти номера указаны: ActionSQL body "\(([0-9]{3})\)[ ]*([0-9]{3})[- \.]*([0-9]{2})[- \.]*([0-9]{2})" "INSERT INTO phonedata(phone,title)VALUES('+7$1$2$3$4','$(title)')"3.12. Использование syslogВсе приложения DataparkSearch по-умолчанию используют syslog для протоколирования своих действий, ошибок и прочих сообщений. indexer поддерживает несколько уровней подробности выдачи сообщений, которые могут быть заданы поцией -v или командой LogLevel в файле конфигурации: Таблица 3-2. уровни подробности сообщений indexer'а
Параллельно с записью в syslog, indexer так же производит вывод на stdout/stderr. Чтобы подавить этот вывод, например, при запуске из cron, используйте опцию -l. Если Вы не хотите использовать syslog, то при запуске configure можно указать флаг --disable-syslog. Собраный таким образом, indexer будет использовать только stdout/stderr для вывода своих сообщений. Syslog использует различные "facilities", чтобы направлять вывод от разных програм в разные логи. По-умолчанию indexer исполтьзует facility LOCAL7, который можно поменять во время сборки, указав configure опцию --enable-syslog=LOG_FACILITY. LOG_FACILITY должен быть правильным именем facility, которые обычно перечислены в заголовочном файле /usr/include/sys/syslog.h Вы можете отредактировать файл /etc/syslog.conf, чтобы перенаправить сообщения DataparkSearch в желаемые файлы. Например, # Log all messages from DataparkSearch to separate file local7.* -/var/log/DataparkSearch.log Еще пример: # Send all DataparkSearch messages to host named central # Syslog on central should be configured to allow this local7.* @central По-умолчанию, все сообщения пишутся так же в лог-файл /var/log/messages. Чтобы избежать этого, добавьте local7.none or local7.!* (игнорировать любые сообщения с facility local7) в Ваши 'catch-all' лог-файлы. For example: #
# Some `catch-all' logfiles.
#
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none;\
local7.!* -/var/log/messages
Для получения более подробной справки о syslog и его конфигурации, посмотрите страницы man syslogd(8) и syslog.conf(5). 3.13. Хранение сжатых копий документовDataparkSearch имеет возможность хранения сжатых копий проиндексированных документов. Копии сжимаются и хранятся при помощи нового демона - stored, который устанавливается в поддиректорию sbin корневой директории установки DataparkSearch (по умолчанию: /usr/local/dpsearch/sbin). В DataparkSearch можно хранить сжатые копии документов без использования демона stored. Для этого вместо настройки параметров stored в файле конфигурации indexer.conf необходимо указать команду DoStore yes. Сохраненные копии документов отображаются отдельной CGI-программой storedoc.cgi. Эта программа получает сохранённую копию от stored и отображает содержимое этого документа в окне броузера предварительно выделив слова из поискового запроса. Для использования возможностей stored, скомпилируйте DataparkSearch с поддержкой zlib: ./configure --with-zlib <other arguments> Вы можете использовать команды Store и NoStore для разрешения или запрещения сохранения некоторых фалов по шаблону. Аргументы у этих команд точно такиеже, как и у команды Allow (см. Разд. 3.10.14>). Все документы сохраняются по умолчанию, если включена поддержка stored. 3.13.1. Конфигурирование storedПеред использованием stored, пожалуйста, проделпйте следующее:
3.13.2. Как работает storedПосле того, как вы сконфигурируете и запустите stored, indexer будет передавать ему проиндексированные документы. А stored будет сжимать полученные документы и сохранять их на диске. 3.13.3. Использование stored при поискеДля включения отображения сохраненных документов при поиске, проделайте следующее:
Если все сконфигурировано правильно, при поиске stored работает следующим образом:
3.13.4. Цитаты документовstored также используется для создания цитат документов на основе слов из запроса. Для задания приблизительного размера цитаты в символах, используйте в search.htm (в секции variables) команду ExcerptSize. Значение, используемое по умолчанию, равно 256. С помощью команды ExcerptPadding вы можете задать примерное число символов, возвращаемых в цитате перед и после найденного слова запроса; значение по умолчанию: 40. При помощи команды ExcerptMark вы можете изменить разделяющую последовательность символов, вставляемую между частями цитаты с ключевыми словами; значение по умолчанию: " ... " (пробел, многоточие, пробел). Вы можете выключить создание цитат (но сохранив возможность показа сохраненных копий) документов указав команду DoExcerpt no в вашем поисковом шаблоне. Глава 4. HTML-парсер в DataparkSearch4.1. Tag-парсерTag-парсер понимает тэги в следующей нотации:
4.2. Специальные символыindexer понимает следующие специальные символы HTML:
4.3. META-тэгиВ настоящий момент HTML-парсер обрабатывает специальным образом следующие META-тэги. Замечание: <META "NAME">обрабатывается так же, как и <META "HTTP-EQUIV">
4.4. СсылкиHTML-парсер распознает гипертекстовые ссылки следующих типов:
Однако вы можете указать список HTML тэгов, которые будут пропущены при поиске новых ссылок, при помощи команды SkipHrefIn. HrefSkipIn "img, link, script" 4.5. КомментарииЕсли Вы индексируете свои собственные ресурсы и имеете возможность отредактировать их, то, возможно, для более оптимальной работы индексации и поиска, имеет смысл специальным образом подготовить документы, "спрятав" от робота отдельные их части, такие как меню навигации, и др.
4.6. Шаблоны для индексированияЕсли вам нужно индексировать не всю страницу целиком, например, чтобы исключить навигацию, рекламу и т.п., вы можете использовать команду BodyPattern чтобы указать шаблон для извлечения контента для индексирования. Например: BodyPattern "<!--content-->(.*)<!--/content-->" "$1"этот шаблон будут извлекать контент между двумя специальными комментариями, и только этот контен будет проиндексирован для этой страницы. Вы можете задать несколько команд BodyPattern, но только первая по порядку подходящая будет применена к странице. Эти команды пытаются примениться к каждой индексируемой странице. Осторожно, большое число таких команд может замедлить скорость индексирования. 4.7. Sub-documentsПоддокументами являются: содержимое фреймов и внедряемых объектов (как правило, flash-роликов), временные редиректы (зачастую используются для установки кук или перенаправления на страницу в зависимости от языка предпочтений пользователя), версии одного и того же документа на разных языках, отдаваемые с использованием Content nehotiation. Управление индексированием поддокументов осуществляется двумя командами: команда SubDocLevel задает максимальный уровень вложенности индексируемых поддокументов. Значение по умолчанию равно 0, что запрещает индексирование поддокументов. Команда SubDocCnt задает максимальное число индексируемых поддокументов всех уровней вложенности (эта команда предназначена в основном для предотвращения бесконечных циклов вложенности страниц друг в дуга). Значение по умолчанию равно 5. Глава 5. Хранение данных5.1. SQL режимы хранения5.1.1. Общая инфоромация о храненииDataparkSearch сохраняет в базе каждое найденное на страницах слово вместе с номером секции документа, в которой найдено это слово, а также с номером позиции слова в документе. Число появлений каждого слова в документе не влияет на релевантность. Однако номер секции документа, в которой встречается слово, может влиять на релевантность. 5.1.2. Разнообразные способы хранения словНа данный момент DataparkSearch поддерживает следующие способы хранения слов
для SQL серверов:
"single", "multi", "crc", "crc-multi", "cache". Режимом по умолчанию является "cache". Способ задаётся параметром
Примеры: DBAddr mysql://localhost/search/?dbmode=single DBAddr mysql://localhost/search/?dbmode=multi DBAddr mysql://localhost/search/?dbmode=crc DBAddr mysql://localhost/search/?dbmode=crc-multi 5.1.3. Способ хранения singleЕсли указан режим хранения "single", все слова сохраняются в одной таблице (или текстовом файле, для втсроенной базы данных) со структурой (url_id,word,weight), где url_id - идентификатор документа, равный значению поля rec_id таблицы "url". Word имеет SQL тип variable char(32). 5.1.4. Способ хранения multiЕсли выбран способ хранения "multi", слова будут сохранены в 13 различных таблицах, в зависимости от их длины. Структура этих таблиц идентична структуре таблицы для способа хранения "single", только для Word используется тип char фиксированной длины, что даёт выигрыш в скорости для большинства баз данных. Это делает режим "multi" более быстрым, по сравнению с "single". Этот режим не реализован для встроенной базы данных. 5.1.5. Способ хранения crcЕсли выбран способ хранения "crc", DataparkSearch вместо слов будет сохранять их индентификатора, вычесленные как CRC32 сумма от этих слов. Этот режим хранения использует меньше дискового пространства и работает быстрее способов хранения "single" и "multi". Наши тесты показали, что только 250 пар слов из списка в 1.600.000 уникальных слов имеют одинаковую CRC32 сумму. Большая часть этих пар (>90%) содержит по меньшей мере одно слово с ошибкой. Инфоромация о каждом слове хранится в следующей структуре (url_id,word_id,weight), где word_id - 32-битовый идентификатор слова, посчитаный как его CRC32 сумма. Этот режим хранения рекомендуется для больших поисковиков. 5.1.6. Способ хранения crc-multiЕсли выбран способ хранения "crc-multi", DataparkSearch хранит CRC32 идентификаторы в нескольких таблицах (или двоичных файлах для встроенной базы данных) с такой же структурой, как и для способа хранения "crc", и в зависимости от лины слова, как при режиме хранения "multi". Обычно это самый быстрый способ и рекомендован для больших поисковиков. 5.1.7. Замечание о стуктуре таблиц для SQL серверовУчтите, что мы разрабатываем DataparkSearch с использованием PostgreSQL в качестве SQL сервера и зачастую не имеем возможности тестировать каждую новую версию со всеми поддерживаемыми базами данных. Т.е., если для вашей базы данных нет соответсвующей структуры таблиц в директории create/you_database, возьмите в качестве образца структуру для PostgreSQL и создайте по аналогии структуру для вашей базы данных. Структура для PostgreSQL всегда поддерживается в обновлённом состоянии. 5.1.8. Дополнительные возможности не-CRC режимов храненияРежимы хранения single и multi поддерживают поиск подстрок. Т.к. при использовании режимов хранения crc и crc-multi хранятся не слова сами по себе, а только их CRC-идентификаторы, то осуществить поиск подстрок не представляется возможным. 5.2. Способ хранения Cache5.2.1. ВведениеВ DataparkSearch реализован способ хранения cache, позволяющий быстро индексировать и искать среди миллионов документов. 5.2.2. Структура индексов слов при способе хранения CacheОсновная идея способа хранения слов cache заключается в хранении индекса слов и вспомогательной информации о документах непосредственно на диске, а не в SQL базе данных. Вся информация об URL (таблицы url и urlinfo) тем не менее продолжает храниться в SQL базе данных. Индекс слов разделён на несколько файлов, число которых может быть задано при помощи команды WrdFiles (по умолчанию - 0x300). Число файлов хранения дополнительной информации о документах задаётся командой URLDataFiles (по умолчанию - 0x300). Внимание: вы должны иметь одаковые значения для WrdFilesи URLDataFilesво всех файлах конфигурации. Индекс слов находится в файлах, расположенных в поддиректории /var/tree относительно корневой директории установки DataparkSearch. Вспомогательная информация о документах храниится в файлах, расположенных в поддиректории /var/url относительно корневой директории установки DataparkSearch. 5.2.3. Утилиты для способа хранения CacheПри выборе способа хранения cache используютсся две дополнительные программы: cached и splitter. cached - демон, получающий по сети информацию о хранимых словах от indexer и записывает её на ваш жёсткий диск. Этот демон может работать в двух режимах, как старый демон cachelogd, входивший в предыдущие версии и только записывающий получаемую информацию на диск, и в новом режиме, в котором объединены функции cachelogd и splitter. splitter - программа создания индексов слов для быстрого поиска на основе записей, сделаных cached при работе в старом режиме. Эти индексы слов и используются в дальнейшем при обработке запросов на поиск. 5.2.4. Запуск способа хранения cacheДля запуска режима хранения cache проделайте следующее:
5.2.5. Использование нескольких splitter одновременноsplitter имеет два ключа:
#!/bin/sh splitter -f 000 -t 3f0 & splitter -f 400 -t 7f0 & splitter -f 800 -t bf0 & splitter -f c00 -t ff0 & 5.2.6. Использование скрипта run-splitterВ поддиректории /sbin находится скрипт run-splitter. Он помогает последовательно выполнить все шаги по построению индекса слов для быстрого поиска. run-splitter имеет два параметра командной строки: run-splitter --hup --split или в короткой форме: run-splitter -k -s Каждый параметр запускает соответсвующий шаг создания индекса слов. run-splitter выполняет все шаги созданяи индекса в правильной последовательности:
В большинстве случаев достаточно просто запустить скрипт run-splitter со всеми параметрами -k -s. Раздельное использование этих параметров редко необходимо. run-splitter имеет необязательные параметры -p=n и -v=m для задания соответсвенно паузы в секунда после обработки каждого буффера и указания выдачи сообщений. n - число секунд (по умолчанию 0), m - уровень выдачи (по умолчанию 4). 5.2.7. ПоискДля использования search.cgi со способом хранения "cache", сконфигурируйте ваш шаблон search.htm как обычно, добавив "cache" в качестве значения параметра dbmode команды DBAddr 5.2.8. Использование лимитов при поискеДля применения лимитов при поиске с использование способа хранения cache, необходимо добавить соответсвующие команды Limit в ваши indexer.conf (или cached.conf, если используется cached) и search.htm или searchd.conf (если используется searchd). Limit prm:type [SQL-Request [DBAddr]] Для использования, например, лимитов по тэгу, категории и сайту, добавьте следующие строки в ваши файлы конфигурации: Limit t:tag Limit c:catategory Limit site:siteid где t - имя CGI параметра (&t=) этого ограничения, tag - тип ограничения. Вместо tag/category/siteid в примере выше вы можете использовать значения из следующей таблицы: Таблица 5-1. Типы предопределенных лимитов способа хранения Cache
Если для команды Limit указан второй, необязательный, параметр Limit prm:strcrc32 "SELECT label, rec_id FROM labels" pgsql://u:p@localhost/sitedb/здесь prm - имя лимита и имя CGI-параметра, используемого для задания ограничения по этому лимиту; strcrc32 - тип используемого лимита, в данном случа - строка. Вместо strcrc32 возможно использовать следующие типы: Таблица 5-2. Типы SQL-лимитов способа хранения Cache
Третьим, необязательным, пораметром В поисковом шаблоне search.htm или в файле конфигурации searchd.conf (если используется searchd) указывать необязательные параметры
Limit prm:strcrc32 5.3. К вопросу производительности DataparkSearchСпособ хранения cache - самый быстрый в DataparkSearch. Используйте его, если хотите получить максимальную скорость поиска. Если после окончания индексирования содержимое вашей директории /var не изменяется, вы можете выключить блокировку файлов при открытиии используя команду "ColdVar yes" в файле search.htm (или в файле searchd.conf, если используется searchd). Это позволит вам сэкономить некоторое время, затрачиваемое на блокировку файлов. 5.3.1. Рекомендация использовать searchdЕсли вы планируете использовать синонимы, стоп-слова или данные ispell, рекомендуется воспользоваться демоном searchd (См. Разд. 5.4>). Демон searchd при запуске загружает эти данные и держит их в памяти. Это позволяет сократить среднее время выполнения запросов на поиск. Таже searchd может загружать предварительно в память некоторые данные об URL (по 20 байт на каждую проиндекированую страницу) и лимиты cache mode (4 или 8 байт на каждый URL в зависимости от типа лимита). Это позволяет сократить среднее время обработки запроса. 5.3.2. Рекомендация использовать файловую систему в памяти (mfs)Если вы планируете использовать cache mode и имеете достаточно оперативной памяти на вашем компьютере, вы можете разместить директорию /usr/local/dpsearch/var на файловой системе в памяти компьютера (mfs). Это ускорит как индексирование, так и поиск. Если памяти недостаточно, что поместить в ней /usr/local/dpsearch/var целиком, вы можете разместить на mfs любую из директорий /usr/local/dpsearch/var/tree, /usr/local/dpsearch/var/url или /usr/local/dpsearch/var/store. 5.3.3. Команда URLInfoSQLДля способа хранения cache вы можете использовать команду URLInfoSQL no для выключения сохранения информации об URL в SQL-базе. Однако использовав эту команду, вы потеряете возможность использовать лимиты по языку и типу документов. 5.3.4. Команда MarkForIndexПо умолчанию, DataparkSearch помечает все URL, отбираемые к индексированию, как ожидающие индексирования через 4 часа. Это позволяет избежать возможного одновременного индексирования одно и того же URL двумя параллельно запущеными копиями indexer. Однако для больших поисковых баз эта операция пометки может занять некоторое время. Вы можете выключить такую пометку используя команду "MarkForIndex no" в вашем файле конфигурации indexer.conf. 5.3.5. Команда CheckInsertSQLПо умолчанию, DataparkSearch пытается добавлять данные в SQL-базу вне зависимости, есть она уже там или нет. На некоторых системах, это может вызывать к дополнительной обработке сообщений об ошибках. Чтобы избежать таких ошибок, Вы можете добавить команду CheckInsertSQL yes в ваш файл конфигурации indexer.conf. 5.3.6. Производительность MySQLПользователи MySQL могут задать
опцию С этой опцией индексы хранятся только в памяти и записываются на диск в последнюю очередь, по команду FLUSH TABLES или по завершению mysqld. Запись одновлённых индексов на диск может занимать минуты и нетерпеливые пользователи могут прибить сервер командой kill -9 и этим разрушить индексные файлы. Другим неудобством является необходимость запуска myisamchk для этих таблиц перед стартом mysqld для проверки, на случай, если mysqld был убит до этого. По этим причинам мы не включили эту опцию в структуру наших таблиц по умолчанию.
Т.к. вся информация в индексах может быть восстановлена из данных, находящихся в таблицах, вы не потеряете данные,
используя опцию 5.3.7. Оптимизация после индексированияЭтот раздел был добавлен Randy Winch У меня есть мысля о производителности, которая может заинтересовать некоторых из вас. Я использую RH 6.2 с обновлением ядра 2.2.14-6.1.1 (поддерживает файлы свыше 2 гигабайт) и mysql 2.23.18-alpha. Я проиндексировал весь наш сайт используя mnoGoSearch 3.0.18:
mnoGoSearch statistics
Status Expired Total
-----------------------------
200 821178 2052579 OK
301 797 29891 Moved Permanently
302 3 3 Moved Temporarily
304 0 7 Not Modified
400 0 99 Bad Request
403 0 7 Forbidden
404 30690 100115 Not found
500 0 1 Internal Server Error
503 0 1 Service Unavailable
-----------------------------
Total 852668 2182703
Я оптимизировал данные, выгрузив их в файл используя Производительность великолепна. Мой любимый тест - поиск "John Smith". Оптимизированная база показала результат в 13 секунд. База до оптимизации показывала примерно 73 секунды. Search results: john : 620241 smith : 177096 Displaying documents 1-20 of total 128656 found 5.3.8. Библиотека асинхронного резолвераИспользование c-ares, библиотеки асинхронного резолвера (dns/c-ares в коллекции портов FreeBSD), позволяет для каждой индексирующей нити выполнять запросы к DNS без блокировки. Пожалуйста учтите, это также повышает число одновременных запросов к вашему DNS серверу. 5.4. Поддержка SearchDsearchd предназначен для ускорения поиска, особенно при использовании ispell-данных, синонимов и стоп-слов. 5.4.1. Для чего использовать searchd
5.4.2. Запуск searchdДля запуска searchd проделайте следующее:
Чтобы обойтись без вывода на stderr, используйте ключ -l. Вывод сообщений в этом слуае будет происходить только через syslog (если поддержка syslog не была выключена при инсталяции при помощи ключа --disable-syslog). В случае, если поддержка syslog выключена, можно перенаправить stderr в файл: /usr/local/dpsearch/sbin/searchd 2>/var/log/searchd.log & Для searchd, так же как и для indexer можно указывать имя файла конфигурации в качестве параметра, например, относительно поддиректории /etc корневой директории установки DataparkSearch: searchd searchd1.conf или указав абсолютный путь: searchd /usr/local/dpsearch/etc/searchd1.conf 5.5. Oracle notes5.5.1. IntroductionBy Anton Zemlyanov 5.5.1.1. Why Oracle?Oracle is a powerful, tunable, scalable and reliable industrial RDBMS. It provides some functionalities which are absent in simple freeware RDBMS like MySQL and PostgresSQL, such as: transactions support, concurrency and consistency, data integrity, partitioning, replication, cost-based and rule-based optimizers, parallel execution, redo logs, RAW devices and many other features. Although Oracle is a very functional database, the additional qualities like reliability impose some overhead. In fact, providing many advantages Oracle has some disadvantages. For example great tenability requires more experienced DBA, redo logs support provide great reliability against instance and media failures but requires more efficient disk system. I think you should select Oracle as a database for mnoGoSearch if you want to search through hundreds of megabytes or several gigabytes of information, reliability is one of the primary concerns, need high availability of the database, and you are ready to pay higher sums for hardware and Oracle DBA to achieve better quality of service. 5.5.1.2. mnoGoSearch+Oracle8 Installation RequirementsIn order to install mnoGoSearch with Oracle RDBMS support you must ensure the following requirements:
5.5.1.3. Currently supported/tested platformsOracle versions:
Operation systems:
Oracle Server may be ran on any platform supporting tcp/ip connections. I see no difficulties to port mnoGoSearch Oracle driver to any commercial and freeware unix systems, any contribution is appreciated. 5.5.2. Compilation, Installation and Configuration5.5.2.1. CompilationOracle 8.0.5.X and Linux RedHat 6.1
./Configure --with-oracle8=oracle_home_dir make make install If you have any troubles, try to put CC = i386-glibc20-linux-gcc in the src/Makefile, this is old version of gcc compiler for glibc 2.0. 5.5.2.2. Installation and ConfigurationCheck whether Oracle Server and Oracle Client work properly. First, try mnoGoSearch service is accessible [oracle@ant oracle]$ tnsping mnoGoSearch 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 mnoGoSearch tables were created [oracle@ant oracle]$ svrmgrl command='connect scott/tiger@mnoGoSearch' 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 mnoGoSearch 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
Setting up search.cgi Copy the file /usr/local/mnoGoSearch/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 Correct the search.htm to provide DBName, DBUser, DBPass information. search.cgi should work now. Глава 6. Подсекции6.1. ТэгиТэг - специальный параметр, который присваивается группе документов. Основная задача тэгов заглючается в возможности группировать документы для ограничения результатов поиска только этой группой документов.
Вы можете использовать команду Tag в
indexer.conf для присвоения тэга серверу, или части сервера.
При поиске, вы можете указать тэг задав CGI-параметр
6.1.1. Тэги в SQL версииНачиная с версии 3.1.x. тип тэгов изменён с INT на CHAR. Тип CHAR даёт несколько полезных возможностей. Вы може использовать SQL-шаблоны '_' and '%' при указании параметра тэга для поиска. Это позволяет тэгам, наравне с категориями, поддерживать возможность вложенности. Например, документы со значением тэга "AB" могут быть найдены, если при поиске указаны параметры тэга "A%" или "AB". Тэги также дают возможность URL быть членом нескольких групп. Задавая SQL-шаблоны, вы можете легко создать две и более групп. Например, тэг "ABCDE" - подпадает под выборку с такими тэгами в качестве параметра: _BCDE A_CDE AB_DE ABC_E ABCD_
6.2. КатегорииСуществует редактор категорий, написаный на perl. Вы можете взять его в директории perl/cat_ed/. Категории похожи на тэги, но обладают свойство вложенности. Т.е. вы можете иметь некоторую категорию внутри другой категории. Основные моменты:
Также можно установить ссылку, т.е категорию, ссылающуюся на другую категорию. Для этого предназначено поле 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 и т.д....
Глава 7. Поддержка языков7.1. Кодировки7.1.1. Поддерживаемые кодировкиDataparkSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5, gbk и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode UTF-8. Это позволяет индексировать документы на более чем 650-ти языках мира, предусмотренных в Unicode. Внимание! Из-за большого объема перекодировочных таблиц, приводящего к увеличению размера исполняемых файлов, поддержка многобайтных кодировок не компилируется по-умолчанию. Смотрите параметры configure, как активизировать поддержку этих кодировок при компиляции. Таблица 7-1. Кодировки и их языковые группы
7.1.2. Разные названия кодировокКаждая кодировка имеет модет иметь несколько различных вариантов названия. Например, iso-8859-2, iso8859-2, latin2 - названия одной и той же кодировки. DataparkSearch понимает следующие варианты названий кодировок: Таблица 7-2. Синонимы наименований кодировок
7.1.3. Перекодировка во время индексацииindexer перекодирует все документы в кодировку, указанную в команде LocalCharset в файле indexer.conf. Внутри программы перекодировка реализована посредством промежуточного представления в виде Unicode. Особенность DataparkSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, DataparkSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, DataparkSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор LocalCharset влияет на размер базы данных. 7.1.4. Выбор LocalCharsetВыбор LocalCharset должен производиться с учетом языкового наполнения индексируемого пространства. Правильный выбор позволит уменьшить место, требуемое для хранения, а так же увеличить скорость индексации и поиска. Если командой LocalCharset указана кодировка UTF-8, то это позволит сохранять любые символы, поддерживаемым в Unicode без необходимости представлять их в HTML-формате. Однако, следует иметь в виду, что это заведомо приводит к использованию до двух-трех байт на каждую не-латинскую букву. Например, на каждую букву кириллицы требуется два байта для сохранения ее в UTF-8. Поскольку все кодировки включают в себя латинские буквы, то любая кодировка предоставляет поддержку по-крайней мере двух языков - английского и еще какого-то одного (или более) языка (единственное исключение - US-ASCII, поддерживающий только латинские буквы). Это означает, что при использовании DataparkSearch с LocalCharset, отличным от UTF-8, одновременная индексация документов с языками из одной группы не приводит к необходимости использовать HTML-формат, а значит не приводит к увеличению необходимого дискового пространства. Например, если Ваша поисковая машина настроена использовать LocalCharset из 5-й группы (Кирилица), то документы на болгарском, белорусском, македонском, русском, сербском, украинском, а так же на английском языках будут сохранены компактно, с использованием одного байта на одну букву. Индексирование документов в других кодировках не из 5-й группы (включая UTF-8) также возможно; однако indexer будет использовать HTML-формат для сохранения букв, отличных от кирилических и английских. Сохранение, например, греческой буквы в кириллической кодировке требует применение семь байт на одну букву. Таким образом, следует придерживаться следующего алгоритма при выборе LocalCharset: если Вы индексируете, например, в-основном кириллические и анлгийские документы, то выгоднее изпользовать LocalCharset из 5й группы. Если же Ваши документы сожержат информацию на языках из многих языковыз групп одновременно, то в качестве LocalCharset выгоднее использовать UTF8. 7.1.5. Определение кодировки документаindexer определяет кодировку в документа в следующем порядке:
7.1.6. Автоматическое распознавание кодировкиDataparkSearch имеет механизм автоматического распознавания кодировки и языка документа. В настоящее время распознается около 100 различных комбинаций кодировки и языка. Распознавание реализовано с использованием так называемой "N-Gram-Based Text Categorization" технологии. В комплекте программы поставляются файлы с так называемыми "картами языков", один файл на каждую пару кодировка-язык. По-умолчанию они устанавливаются в /usr/local/dpsearch/etc/langmap/. Чтобы увидеть полный список распознаваемых в настоящий момент языков и кодировок, взгляните в этот каталог. Распознавание работает хорошо на текстах в 500 байт и длиннее. Более короткие тексты могут распознаваться хуже. Для активизации автоматического распознавания кодировки необходимо загрузить языковые карты, используя команды LangMap. 7.1.6.1. Команда LangMapFileЗагружает из указанного файла карту языка и кодировки для автоматического их определения. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд LangMapFile. LangMapFile langmap/en.ascii.lm 7.1.6.2. Создание собственных карт языковДля создания собственных карт языков служит утилита dpguesser. Кроме этой утилиты вам также потребуется файл-образец текстов на данном языке в нужной кодировке. Для создания своей карты языка используйте следующий формат команды: dpguesser -p -c charset -l language < FILENAME > language.charset.lm Утилиту dpguesser можно также использовать для определения языка и кодировки файла на основании уже созданных карт языков. Для этого используйте следующий формат команды: dpguesser [-n maxhits] < FILENAME Для некоторых языков существует несколько используемых кодировок. Для преобразования текстов из одной, поддерживаемой DataparkSearch кодировки, в другую предназначена утилита dpconv. dpconv [OPTIONS] -f charset_from -t charset_to [configfile] < infile > outfile По умолчанию, утилиты dpguesser и dpconv устанавливаются в директорию /usr/local/dpsearch/sbin/. Поддерживается автоматическое обновление карт языков и кодировок, если удалённый сервер возвращает чётко указаные язык и кодировку. Для включения этой возможности необходимо в файле indexer.conf указать команду LangMapUpdate yes По умолчанию, DataparkSearch использует только первые 8192 байт каждого индексируемого файла для определения языка и кодировки. Вы можете изменить это значение при помощи команды GuesserBytes. Используйте значение 0 для учёта всего такста индексируемого документа. GuesserBytes 16384 7.1.7. Кодировка документов по-умолчаниюИспользуйте команду RemoteCharset в indexer.conf чтобы установить кодировку документов по-умолчанию. Если индексируемый сервер не выдает кодировку документа ни в заголовке Content-Type, ни в META-тэге, и при этом автоматическое распознаывание либо отключено, либо не дало хорошего результата (т.е. язык и кодировка документа "не похожи" на представленные в загруженных картах), то в качестве кодировки документа будет использована кодировка, указанная в команде RemoteCharset. Если же кодировка по-умолчанию не указана, то будет использована iso-8859-1 (latin1). 7.1.8. Язык документов по-умолчаниюВы можете установить язык документов по-умолчанию
с помощью команды DefaultLang <string> Задаёт язык документов по умолчанию. DefaultLang en 7.1.9. Перекодировка во время поискаЧтобы указать кодировку, в которой будут оторбражаться результаты поиска, используйте команду BrowserCharset в search.htm. BrowserCharset может отличаться от LocalCharset. Поисковая программа произведет перекодировку автоматически. 7.1.10. Команда LocalCharsetЗадаёт кодировку, которая будет использоваться для хранения информации в базе данных. Данные во всех других кодировках будут перекодированы в эту кодировку. См. Разд. 7.1> для подробного описания как выбрать LocalCharset для языков, используемых на вашем сайте или сайтах, а также списка поддерживаемых кодировок. Эта команда должны быть задана один раз и имеет глобальный эффект для всего файла конфигрурации. Значение по умолчанию: iso-8859-1 (latin1). LocalCharset koi8-r 7.1.11. Команда RemoteCharsetRemoteCharset <charset>
RemoteCharset iso-8859-5 7.1.12. Команда URLCharsetURLCharset <charset>
URLCharset KOI8-R 7.1.13. Команда CharsToEscapeCharsToEscape "\"&<>![]" Используйте эту команду в вашем поисковом шаблоне для указания списка эскейп-символов для мета-переменных поискового шаблона типа $&(x). 7.2. Создание многоязычных страниц поискаОсновная идея Craig Small Зачастую требуется поддержка различных языков, что означает использование различных файлов search.htm в зависимости от языка, выбранного в настройках броузера пользователя. Пожалуйста, устите, что замечания по конфигурированию, даваемы ниже, абсолютно одинаковы для обоих поисковых фронт-ендов search.php и search.cgi.
Дальнейшая установка проводится в три этапа.
7.2.1. Как это работает ?
Что случится, если пользователь, к примеру, захочет немецкий ? У нас нет search.de.cgi (search.de.php), т.е. первый элемент в списке DirectoryIndex не отработает, тогда сервер попробует второй, search.php Да, он получит страницу на английском, но это лучше, чем 404. Это работает, возможно вам понадобиться еще что-то подкрутить в конфигурации apache, - я пробовал на сервере, для которого уже всё было настроено и возможно что-то упустил в описании конфигурирования веб-сервера. 7.2.2. Возможные сложностиУ вас могут возникнуть некоторые проблемы с определением языка, вызванные:
Команда разработчиков apache работает над возможностями обхода некоторых из этих трудностей, если это возможно. Для плотно используемого веб-сервера, вы можете ожидать примерно один е-мейл в неделю с описанием подобной проблемы. 7.3. Сегментеры фраз японского, тайского, корейского и китайского языковТрадиционное японское, корейское, тайское или китайское письмо не предусматривает размещение между словами фразы символов-разделителей, аналогичных пробелу, используемому, например, в европейских языках. Поэтому при индексировании текстов на этих языках необходимо дополнительно производить разбиение фраз на отдельные слова. Иногда для красоты, текст на китайском, японском, корейском или тайском языке набирается с пробелом между каждым иероглифом. В этом случае для индексирования таких текстов, вы можете использовать команды "ResegmentChinese yes", "ResegmentJapanese yes", "ResegmentKorean yes" or "ResegmentThai yes". При включенном ресегментировании все пробелы между символами в тексте убираются, а затем весь текст целиком обрабатывается сегментерами DataparkSearch (см. ниже). 7.3.1. Сегментер фраз японского языкаДля разбиения на слова фраз японского языка используется система морфологического анализа японского языка ChaSen или морфологический анализатор японского языка MeCab. Поэтому её необходимо установить одну из этих систем до начала сборки и установки DataparkSearch. Для включения поддержки разбиения фраз японского языка, вам необходимо указать для configure
ключ 7.3.2. Сегментер фраз китайского языкаДля разбиения на слова фраз китайского языка используется частотный словарь китайского языка, а разбиение производится методом динамического программирования чтобы суммарная частота использования всех получаемых слов после разбиения была максимальной. Для включения поддержки сегментера фраз на китайском языке, необходимо при сборке DataparkSearch включить поддержку кодировки GB2312, если будет использоваться словарь упрощенного китайского mandarin.freq, или кодировки Big5, если будет использоваться словарь традиционного китайского TraditionalChinese.freq, а также указать в indexer.conf при помощи команды LoadChineseList частотный словарь слов китайского языка для загрузки. LoadChineseList [charset dictionaryfilename] По умолчанию используется кодировка GB2312 и словарь mandarin.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadChineseList
7.3.3. Сегментер фраз тайского языкаДля разбиения на слова фраз тайского языка используется тот же метод, что и для китайского языка, оличие заключается в использовании частотного словаря тайского языка. Для включения поддержки сегментера фраз на тайском языке, необходимо указать в indexer.conf при помощи команды LoadThaiList частотный словарь слов тайского языка для загрузки. LoadThaiList [charset dictionaryfilename] По умолчанию используется кодировка tis-620 и словарь thai.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadThaiList
7.3.4. Сегментер фраз корейского языкаДля разбиения на слова фраз корейского языка используется тот же метод, что и для китайского языка, оличие заключается в использовании частотного словаря корейского языка. Для включения поддержки сегментера фраз на корейском языке, необходимо указать в indexer.conf при помощи команды LoadKoreanList частотный словарь слов корейского языка для загрузки. LoadKoreanList [charset dictionaryfilename] По умолчанию используется кодировка euc-kr и словарь korean.freq. Вы можете использовать свой собственный словарь в своей кодировке. Нужно только включить поддержку этой кодировки и указать кодировку и словаь в качестве параметров команды LoadKoreanList
7.4. Поддержка мультиязычных веб серверовНекоторые веб-серверы могут поддерживать механизм согласования языка содержимого. В этом случае по одному URL может выдаваться несколько различных документов, в зависимости от языковых предпочтений клиента. Для индексирования всех страниц таких серверов предназначена клманда VaryLang, задающая список языков, разделённых пробелами, которые будут запрашиваться при индексировании каждого URL, имеющего несколько языковых вариантов. Пример использования: VaryLang "ru en fr" При индексировании будут запрашиваться копии документов на русском, английском и французском языках. Глава 8. Поиск документов8.1. Использование поисковых фронт-эндов8.1.1. Осуществление поискаОткройте предпочитаймый вами фронт-энд в окне броузера: http://your.web.server/path/to/search.cgi Чтобы найти что-то, просто наберите слова, которые хотите найти и нажмите кнопку ОТОСЛАТЬ.
Например: mysql odbc.
DataparkSearch найдет все документы, содержащие слово Чтобы найти фразу, просто заключите её в кавычки. Например: "uncontrollable sphere". 8.1.2. Параметры поискаФронт-энды DataparkSearch поддерживают следующие параметры, указываемыме в CGI-запросе. Вы можете использовать их в HTML форме на странице поиска. Таблица 8-1. Параметры поиска
8.1.3. Изменение весов различных частей документов во время поиска Параметр Для использования этой возможности необходимо иметь уникальные ID для различных секций документов, указываемых в командах Section файла конфигурации indexer.conf command. На данный момент поддерживается до 256 различных секций. Предположим, что в indexer.conf определены следующие секции: Section body 1 256 Section title 2 128 Section keywords 3 128 Section description 4 128 Значение D - вес для секции 1 (body) Примеры: wf=0001 поиск только по секции body. По умолчанию, все секции имеют вес 1. По умолчанию, DataparkSearch собирается с быстрым вариантом расчёта релевантности.
В этом случае только нулевое или ненулевое значение веса имеет смысл (это позволяет только включать/исключать
заданые секции из результатов поиска). Чтобы включить полную поддержку динамических весов секций, необходимо
задать опцию 8.1.4. Использование фронт-энда на страницах с SSIПри сипользовании динамических shtml страниц, содержащих SSI вызов search.cgi, т.е. search.cgi не вызывается напрямую как CGI программа, необходимо отвергнуть переменную окружения SCRIPT_NAME, т.к. все ссылки на страницах поиска должны вести на динамическую страницу, а не на search.cgi. Например, если shtml страница содержит строку <--#include virtual="search.cgi">, переменная SCRIPT_NAME будет указывать на search.cgi, а не на shtml страницу. Для возможности отказа от использования переменной SCRIPT_NAME, мы ввели переменную DPSEARCH_SELF, которую вам необходимо добавить в конфигурацию сервера Apache httpd.conf.А search.cgi сначала проверяет переменную DPSEARCH_SELF и только потом, при неудаче SCRIPT_NAME. Вот пример использования переменной окружения DPSEARCH_SELF при помощи команд конфигурирования сервера Apache SetEnv/PassEnv: SetEnv DPSEARCH_SELF /path/to/search.cgi PassEnv DPSEARCH_SELF 8.1.5. Использование нескольких шаблоновЗачастую необходимо использовать несколько различных шаблонов с одним и тем же search.cgi. Существует несколько способов сделать это. Они указываются ниже в том порядке, в каком search.cgi определяет имя шаблона:
8.1.6. Операторы проискаОператор allin<section>:, где <section> - имя любой секции, определенной в файле конфигурации sections.conf (или командами Section в indexer.conf или в search.htm/searchd.conf) и имеющей ненулевой номер секции (см. Разд. 3.10.47>), позволяет ограничить область поиска указываемого слова в поисковом запросе только заданой секцией. От ограничения поиска по секциям при помощи CGI-параметра &wf= отличается тем, что ограничение действует только на слова поискового запроса, указываемые после данного оператора. Например, если sections.conf содержит команды Section body 1 256 Section title 2 128 Section url 3 0 strictто в поисковом запросе можно использовать операторы allinbody:, allintitle: и allinurl:. По запросу computer allintitle: science будут найдены документы, содержащие слово "science" в заголовке и слово "computer" в любой секции документа. 8.1.7. Булев поискДля задания более сложных запросов, вы можете строить булевы запросы поиска.
Необходимо в поисковой форме указать режим поиска DataparkSearch понимает следющие булевы операторы: AND или & - логическое И. Например, mysql & odbc. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc". Вы также можете использовать знак + для этого оператора. NEAR - Оператор NEAR принимает истиное значение если оба слова находятся не далее, чем в 16 словах друг от друга. Например, mysql NEAR odbc. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc", расположеные на расстоянии не далее 16 слов друг от друга. ANYWORD или * - Оператор ANYWORD аналогичен оператору И, но принимает истиное значение, если между обеими словами находится одно любое слово и левый операнд имеет меньшую позицию, нежели правый. Например, "mysql * odbc" - DataparkSearch найдёт все документы, содержащие оба слова "mysql" и "odbc", и меющие любое слово между ними, например, документы с фразой "mysql via odbc". OR или | - логическое ИЛИ. Например, mysql|odbc. DataparkSearch будет искать URL, содержащие или слово "mysql" или слово "odbc". NOT или ~ - логическое НЕ. Например, mysql & ~ odbc. DataparkSearch будет искать URL, содержащие слово "mysql" и в тоже время не содержащие слово "odbc". Обратите внимание, что ~ всего лишь исключает некоторые документы из результата поиска. Запрос "~ odbc" ничего не найдёт! () - оператор группирования для создания более сложных запросов поиска. Например, (mysql | msql) & ~ postgres. " - оператор выделения фраз. Например, "russian apache" & "web server". Вы также можете использовать знак ' для этого оператора. Язык запросов хоть и прост, но достаточно мощный. Рассматривайте такой запрос как обычное булево выражение. 8.1.8. Язык запросов Verity Query Language, VQLDataparkSearch поддерживает только префиксный вариант Verity Query Language. Также поддерживается только следующее подмножество операторов VQL: Таблица 8-2. Операторы VQL, поддерживаемые DataparkSearch
8.1.9. Как используются при поиске устаревшие документыУстаревшие документы продолжают включаться в результаты поиска по их старому содержимому до тех пор, пока эти документы не будут удалены или обновлены с очередным переиндексированием. 8.2. Модуль mod_dpsearch для Apache httpdНачиная с версии 4.19 DataparkSearch также предоставляет модуль для веб-сервера Apache, реализующий возможности searchd и search.cgi. 8.2.1. Для чего использовать mod_dpsearch
8.2.2. Конфигурирование mod_dpsearchЧтобы включить поддержку этой возможности, добавьте к configure ключ 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>Этим модулем поддерживаются три директивы конфигурации: 8.3. Как создавать шаблоны результатов поискаПользователи DataparkSearch имеют возможность настраивать вывод результатов поиска (вывод search.cgi ). Эта настройка находится в файле search.htm, располагаемым в поддиректории /etc/ относительно корневой директории установки DataparkSearch. Файл шаблона это обычный HTML файл, разделённый на секции.
Каждая секци начинается с разделителя <!--sectionname--> и заканчивается разделителем <!--/sectionname-->, оба разделителя должны находится на отдельной строке, в её начале. Каждая секция состоит из HTML-кода, содержащего специальные метасимволы (переменные шаблона). Каждый метасимвол заменяется соответсвующей ему строкой во время заполнения шаблона при выдаче результатов поиска. Формат переменных шаблона следующий: $(x) - значение $&(x) - значение с HTML-кодировкой недопустимых символов и выделением слов из запроса. $*(x) - значение с HTML-кодировкой недопустимых символов. $%(x) - значение с URL-кодированием запрещенных символов. $^(x) - значение с выделением слов из поискового запроса. $(x:128) - значение усекается до 128 байт, если оно длиннее. $(x:UTF-8) - значение записывается в кодировке UTF-8. Можно указывать любую поддерживаемую кодировку. $(x:128:right) - значение усекается слева до 128 байт, если оно длиннее. 8.3.1. Секции шаблонаОпределены следующие секции шаблонов: TOP>, BOTTOM>, RESTOP>, RES>, CLONE>, RESBOT>, navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>, notfound>, noquery>, error>, variables>. 8.3.1.1. Секция TOPЭта секция всегда вставляется первой на каждой странице ответов. Вы должны начинать эту секцию с <HTML><HEAD> и т.д. Также это подходящее место для размещения формы поиска. В этой секции вы можете использовать некоторые метасимволы (переменные шаблона): $(self) - аргумент атрибута ACTION тэга FORM $(q) - запрос на поиск $(cat) - текущее значение категории $(tag) - текущее значение тэга $(rN) - случайное число (здесь N - число) Если вы хотите разместить на ваших страницах некоторые банеры случайным образом,
используйте Например: $(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>. <SELECT NAME="lang">
<OPTION VALUE="en" SELECTED="$(lang)">English
.....
</SELECT>
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, значение которого равно значению соответсвующей переменной. В этом примере формы помогается выбрать различные ограничения по времени. <!-- 'search with time limits' options --> <TR><TD> <TABLE CELLPADDING=2 CELLSPACING=0 BORDER=0> <CAPTION> Limit results to pages published within a specified period of time.<BR> <FONT SIZE=-1><I>(Please select only one option) </I></FONT> </CAPTION> <TR> <TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="back" CHECKED></TD> <TD><SELECT NAME="dp"> <OPTION VALUE="0" SELECTED="$(dp)">anytime <OPTION VALUE="10M" SELECTED="$(dp)">in the last ten minutes <OPTION VALUE="1h" SELECTED="$(dp)">in the last hour <OPTION VALUE="7d" SELECTED="$(dp)">in the last week <OPTION VALUE="14d" SELECTED="$(dp)">in the last 2 weeks <OPTION VALUE="1m" SELECTED="$(dp)">in the last month <OPTION VALUE="3m" SELECTED="$(dp)">in the last 3 months <OPTION VALUE="6m" SELECTED="$(dp)">in the last 6 months <OPTION VALUE="1y" SELECTED="$(dp)">in the last year <OPTION VALUE="2y" SELECTED="$(dp)">in the last 2 years </SELECT> </TD> </TR> <TR> <TD VALIGN=center><INPUT type=radio NAME="dt" VALUE="er"> </TD> <TD><SELECT NAME="dx"> <OPTION VALUE="1" SELECTED="$(dx)">After <OPTION VALUE="-1" SELECTED="$(dx)">Before </SELECT> или так <SELECT NAME="dm"> <OPTION VALUE="0" SELECTED="$(dm)">January <OPTION VALUE="1" SELECTED="$(dm)">February <OPTION VALUE="2" SELECTED="$(dm)">March <OPTION VALUE="3" SELECTED="$(dm)">April <OPTION VALUE="4" SELECTED="$(dm)">May <OPTION VALUE="5" SELECTED="$(dm)">June <OPTION VALUE="6" SELECTED="$(dm)">July <OPTION VALUE="7" SELECTED="$(dm)">August <OPTION VALUE="8" SELECTED="$(dm)">September <OPTION VALUE="9" SELECTED="$(dm)">October <OPTION VALUE="10" SELECTED="$(dm)">November <OPTION VALUE="11" SELECTED="$(dm)">December </SELECT> <INPUT TYPE=text NAME="dd" VALUE="$(dd)" SIZE=2 maxlength=2> , <SELECT NAME="dy" > <OPTION VALUE="1990" SELECTED="$(dy)">1990 <OPTION VALUE="1991" SELECTED="$(dy)">1991 <OPTION VALUE="1992" SELECTED="$(dy)">1992 <OPTION VALUE="1993" SELECTED="$(dy)">1993 <OPTION VALUE="1994" SELECTED="$(dy)">1994 <OPTION VALUE="1995" SELECTED="$(dy)">1995 <OPTION VALUE="1996" SELECTED="$(dy)">1996 <OPTION VALUE="1997" SELECTED="$(dy)">1997 <OPTION VALUE="1998" SELECTED="$(dy)">1998 <OPTION VALUE="1999" SELECTED="$(dy)">1999 <OPTION VALUE="2000" SELECTED="$(dy)">2000 <OPTION VALUE="2001" SELECTED="$(dy)">2001 </SELECT> </TD> </TR> </TR> <TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="range"> </TD> <TD> Between <INPUT TYPE=text NAME="db" VALUE="$(db)" SIZE=11 MAXLENGTH=11> and <INPUT TYPE=text NAME="de" VALUE="$(de)" SIZE=11 MAXLENGTH=11> </TD> </TR> </TABLE> </TD></TR> <!-- end of stl options --> 8.3.1.2. Секция BOTTOMЭта секция всегда выводится последней на каждой странице результатов поиска. Таким образом вы должны разместить здесь все закрывающие тэги для соответсвующих открывающих тэгов из секции top. Но совершенно необязательно размещать эту секцию в конце файла шаблона, что позволяет вам организовать ваш файл шаблон пости как обычный html файл, чтобы иметь возможность просматривать его в окне броузера для представления о том, как он будет выглядеть при выдаче пользователю. Ниже дан пример секции bottom: <!--bottom--> <P> <HR> <DIV ALIGN=right> <A HREF="http://www.maxime.net.ru/"> <IMG SRC="dpsearch.gif" BORDER=0 ALT="[Powered by DataparkSearch search engine software]"> </A> </BODY> </HTML> <!--/bottom--> 8.3.1.3. Секция RESTOPЭта секция вставляется непосредственно перед результатами поиска. Служит местом указания общих параметров результата поиска. Вы можете использовать для этого слудующие метасимволы (переменные):
Ниже дан пример секции restop: <!--restop--> <TABLE BORDER=0 WIDTH=100%> <TR> <TD>Search<BR>results:</TD> <TD><small>$(WE)</small></TD> <TD><small>$(W)</small></TD> </TR> </TABLE> <HR> <CENTER> Displaying documents $(first)-$(last) of total <B>$(total)</B> found. </CENTER> <!--/restop--> 8.3.1.4. Секция RESЭта секция используется для вывода разнообразной информации о каждом найденном документе. Могут использоваться слудующие метасимволы (переменные):
Ниже пример секции res: <!--res--> <DL><DT> <b>$(Order).</b><a href="$(URL)" TARGET="_blank"> <b>$(Title)</b></a> [<b>$(Score)</b>]<DD> $(Body)...<BR> <b>URL: </b> <A HREF="$(URL)" TARGET="_blank">$(URL)</A>($(Content-Type))<BR> $(Last-Modified), $(Content-Length) bytes<BR> <b>Description: </b>$(meta.description)<br> <b>Keywords: </b>$(meta.keywords)<br> </DL> <UL> $(CL) </UL> <!--/res--> 8.3.1.5. Секция CLONEСодержимое этой секции включается в результат поиска вместо метасимвола $(CL) для каждого найденного клона документа. Служит для указания всех URL с одним и тем же содержимым (как зеркала и т.п.). Вы можете использовать те же мета символы, что и в секции res. Ниже пример секции clone. <!--clone--> <li><A HREF="$(DU)" TARGET="_blank">$(DU)</A> ($(DC)) $(DM) <!--/clone--> 8.3.1.6. Секция RESBOTта секция выводится непосредственно после результатов поиска. Обычно здесь размещается навигация по страницам поиска. Вот пример секции resbot: <!--resbot--> <HR> <CENTER> Result pages: $(NL)$(NB)$(NR) </CENTER> <!--/resbot--> Навигация - сложная штука, создаваемая из следующих секций шаблона: navleft, navleft_nop>, navbar0>, navright, navright_nop>, navbar1>. 8.3.1.7. Секция navleft, navleft_nopИспользуются для образования ссылки на предыдущую страницу. Если предыдущая страница существует, исаользуется <!--navleft-->, если нет (на первой странице) - используется <!--navleft_nop-->. <!--navleft--> <TD><A HREF="$(NH)"><IMG...></A><BR> <A HREF="$(NH)">Prev</A></TD> <!--/navleft--> <!--navleft_nop--> <TD><IMG...><BR> <FONT COLOR=gray>Prev</FONT></TD> <!--/navleft_nop--> 8.3.1.8. Секция navbar0Используется для печати текущей страницы в списе страниц. <!--navbar0--> <TD><IMG...><BR>$(NP)</TD> <!--navbar0--> 8.3.1.9. Секции navright, navright_nop sectionЭти секции используются для печати ссылки на следующую страницу. Если следующая страница существует, используется секция <!--navright-->, на последней странице используется <!--navright_nop-->. <!--navright--> <TD> <A HREF="$(NH)"><IMG...></A> <BR> <A HREF="$(NH)">Next</A></TD> <!--/navright--> <!--navright_nop--> <TD> <IMG...> <BR> <FONT COLOR=gray>Next</FONT></TD> <!--/navright_nop--> 8.3.1.10. Секция navbar1Используется для печати ссылок на другие страницы списка страниц результата поиска. <!--navbar1--> <TD> <A HREF="$(HR)"> <IMG...></A><BR> <A HREF="$(NH)">$(NP)</A> </TD> <!--/navbar1--> 8.3.1.11. Секция notfoundКак говорит имя этой секции, она выводится только в случае, если по запросу не найдено ни одного документа. Вы можете дать сдесь небольшие советы по изменению запроса, либо по ослаблению ограничений поиска. Ниже пример секции notfound: <!--notfound--> <CENTER> Sorry, but search hasn't returned results.<P> <I>Try to compose less restrictive search query or check spelling.</I> </CENTER> <HR> <!--/notfound--> 8.3.1.12. Секция noqueryЭта секция выводится если пользователь выдал пустой запрос на поиск.. Ниже приводится пример этой секции: <!--noquery--> <CENTER> You haven't typed any word(s) to search for. </CENTER> <HR> <!--/noquery--> 8.3.1.13. Секция errorЭта секция выводится только при обнаружении ошибок во время поиска. Например, если не запущен SQL сервер и т.п. Вы можете использовать следующий метасимвол (переменную): $(E) - текст сообщения об ошибке. Пример секции error: <!--error--> <CENTER> <FONT COLOR="#FF0000">An error occured!</FONT> <P> <B>$(E)</B> </CENTER> <!--/error--> 8.3.2. Секция VariablesВ специальной секции variables вы можеде задать значения некоторых переменных и параметров поиска. Секция variables обычно выглядит примерно так: <!--variables DBAddr mysql://foo:bar@localhost/search/?dbmode=single VarDir /usr/local/dpsearch/var/ LocalCharset iso-8859-1 BrowserCharset iso-8859-1 TrackQuery no Cache no DetectClones yes HlBeg <font color="blue"><b><i> HlEnd </i></b> R1 100 R2 256 Synonym synonym/english.syn ResultContentType text/xml Locale ru_Ru.KOI8-R -->
Команда VarDir задаёт альтернвтивный путь рабочей директории при использовании способа хранения cache. По умолчанию используется поддиректория /var относительно корневой директории установки DataparkSearch. Команда LocalCharset указывает кодировку локальной базы данных. Должна совпадать с кодировкой, заданной этой же командой в indexer.conf. Команда BrowserCharset указывает, какая кодировка используется для вывода результатов поиска. Она может отличаться от значения, указанного в LocalCharset. Значения всех метасимволов (переменных) при выводе будут перекодированы в эту кодировку, однако сам шаблон не перекодируется, он уже должен быть в этой кодировке. Используйте "Cache yes/no" для включения/выключения кэширования результатов поиска. Используйте "DetectClones yes/no" для включения/выключения определения клонов. Используйте "GroupBySite yes/no" для включения/выключения группировки результатов по url.site_id.
Команды HlBeg и HlEnd используются для задания способа выделения подсвечиваемых слов. Найденные слова окружаются этими тэгами. Команда Alias в search.htm похожа на одноимённую команду в indexer.conf, но имеет действие на отображение результатов поиска, а не при индексировании. См. детали в Разд. 3.7>. Команды R1 и R2 задают диапазон значений для переменных шаблона $(R1) и $(R2). Команда Synonym используется для загрузки указанного списка синонимов. Имя файла синонимов может быть и абсолютным и относительно поддиректории /etc коренвой директории установки DataparkSearch. Команда DateFormat служит для изменения формата вывода даты последней модификации файла. При задании своего формата, используйте метапеременные функции strftime.
Команда "Log2stderr yes/no" предписывает выводить все сообщения об ошибках на stderr. Команда ResultsLimit может быть использована для ограничения максимального числа выводимых результатов поиска. При использовании searchd, эта команда может быть указана в файле конфигурации searchd.conf. Команда ResultContentType используется для указания заголовка Content-Type страницы с результатами. Значение по умолчанию: text/html. Команда Locale используется для указания заголовка для задания LC_ALL локали при выдаче результатов поиска. Значение по умолчанию: не определено (используется установленное ранее значение). При помощи команды MakePrefixes yes вы можете автоматически расширять поисковый запрос префиксами слов запроса. В частности, это можно использовать при организации подсказок при поиске. (См. также Разд. 3.10.60>) 8.3.3. Включения в шаблонахВы можете использовать <!INCLUDE Content="http://hostname/path"> дял включения внешних URLs в страницу результатов поиска. ВНИМАНИЕ: Вы можете использовать <!INCLUDE> ТОЛЬКО в следующих секциях шаблона: <!--top--> Это пример использования включения: <!--top--> .... <!INCLUDE CONTENT="http://hostname/banner?query=$&(q)"> ... <!--/top--> 8.3.4. Условные операторы в шаблонахDataparkSearch поддерживет в шаблонах условные операторы: <!IF, <!ELSE, <!ENDIF, <!ELIF, <!ELSEIF, <!SET, <!COPY, <!IFLIKE, <!IFREGEX, <!ELIKE, <!EREGEX, <!ELSELIKE, <!ELSEREGEX. <!IF NAME="Content-Type" Content="application/pdf"> <img src="pdf.png"> <!ELIF NAME="Content-Type" Content="text/plain"> <img src="text.png"> <!ENDIF> Возможно использовать вложенные конструкции условных операторов. Это обеспечивает большую гибкость при написании шаблонов результатов поиска. Смотрите примеры использования в файле etc/search.htm-dist. 8.3.5. О безопасностиВНИМАНИЕ: Так как файл шаблона содержит такую информацию как пароль, во избежание утечки этого пароля, рекомендуется проверить права доступа к нему, чтобы обеспечить право чтения только для программы поиска. 8.4. Дизайн search.htmlВ этой секции подразумевается, что в качестве фронтэнда используется search.cgi. 8.4.1. Как создаётся страница результатовФайл etc/search.htm соостоит из некоторого числа блоков, разделённых HTML коммантариями, начинающимися с <!--comment--> и заканчивающимися <!--/comment-->. Блок <!--variables--> только используется search.cgi Остальные блоки формируют части страницы результатов поиска в зависимости от ситуации. Блоки <!--top--> и <!--bottom--> всегда показываются пользователям как верх и низ страницы результатов соответственно. также существуют следующие блоки <!--restop-->, <!--res--> and <!--resbot--> , блоки навигации и блоки <!--notfound-->, <!--noquery--> and <!--error-->. Последние выдаются в зависимости от результата поиска. Любой HTML-код, расположенный вне этих блоков игнорируется. Таким образом, вывод search.cgi всегда будет примерно таким: top restop top top top res или notfound или error или noquery resbot bottom bottom bottom (navigation) bottom Навигационный блок строится таким же образом. Блоки <!--navleft--> и <!--navright--> отображаются на всех страницах и ссылаются на предыдущую и на следующую страницы с результатами поиска, тогда как <!--navXXX_nop--> используются, если нет больше страниц в том или другом направлении. 8.4.2. Ваш HTML-шаблонПростейший HTML-шаблон, необходимый для работы, дан в etc/search.htm-dist. Рекомендуется начать работу именно с него, ввнеся только ваши настроки в блок <!--variables-->. Если вы решили украсить ваш поиск, у вас есть два пути. Первый: оставить простой дизайн search.htm, но сделать его частью набора фреймов. Таким образом вы можете добавить меню и др. элементы в одном фрейме, и остваить вывод search.htm в другом. Второй путь состоит во внесении вашего дизайна целиком в search.htm Если вы хорошо понимаете сситему блоков, описанную выше, этот путь не будет слишком сложным. Самым важным моментом при этом будет отслеживание открытия html-тэгов в одном блоке и закрытие их в другом. Например, вы желаете видеть страницу как таблицы примерно такого вида: ----------------------------------
| верхняя таблица |
|..................................|
| . |
|левая . |
| . |
| . основная таблица |
|таблица . |
| . |
| . |
----------------------------------Если планируется поместить результаты поиска в основную таблицу, вы можете поместить в блок <!--top--> в search.htm весь HTML-код вплоть до открытия основной таблицы (<table><tr><td>). Если вы также поместите код закрытия основной таблицы и остальные закрывающие тэги страницы в блок <!--bottom--> (</table></tr></td></body></html>) и оставите остальные блоки без изменения, вы получите желаемый табличный дизайн и результаты поиска будут в основной таблице. При более сложном дизайне, если сами хотите формировать страницу с результатами поиска, вы можете и далее пользовать этим методом, до тех пор, пока можете отслеживать откртие-закрытие тэгов в раличных блоках или их комбинациях. Отдельные блоки могут быть отформатированы так угодно, насколько их форматирование закончено в пределах этого блока. Т.е. ничто не мешает делать что-то вроде этого: <!--error-->
<table>
<tr><td bgcolor"red">
<font color="#ffffff">
[error variables]
</font>
</tr><td>
</table>
<!--error-->
Чего вы не можете сделать без редактирования исходного кода DataparkSearch, это изменить порядок обработки блоков из search.htm. 8.4.3. О формахМногие современные броузеры могут работать с формами, разнесёнными по разным элементам таблицы или разным таблицам, однако создание таких форм противоречит всем стандартам создания HTML-кода. Создавайте такие формы только когда не можете избежать этого. Например, <table>
<tr><td>
<form>
<input type="text" name="something">
<input type="radio" name"button1">
<input type="radio" name"button2">
</form>
</tr></td>
</table>
это допустимо, а
<table>
<tr><td>
<form>
<input type="text" name="something">
</tr></td>
</table>
<table>
<tr><td>
<input type="radio" name"button1">
<input type="radio" name"button2">
</form>
</tr></td>
</table>
это нет.Заметим, что элементы ввода в формах поиска могут быть изменены по желанию. В образце шаблона поиска используются меню-раскладушки, но ничто не мешает использовать кпоки-переключалки или скрытые поля ввода, даже текста запроса поиска. Например, если в search.htm указано Results per page: <SELECT NAME="ps"> <OPTION VALUE="10" SELECTED="$ps">10 <OPTION VALUE="20" SELECTED="$ps">20 <OPTION VALUE="50" SELECTED="$ps">50 </SELECT>вы можете заменить это на <input type="radio" name="ps" value="10" checked="$(ps)"> <input type="radio" name="ps" value="20" checked="$(ps)"> <input type="radio" name="ps" value="50" checked="$(ps)">в результате чего получим три кпоки-переключалки вместо выпадающего меню, тем же значением "20" по умолчанию и с той же функциональнотью. Единственное, что вы не можете делать, это давать возможность множественного выбора в меню типа <type="checkbox"> или <select multiple>. Заметим, что вы можете также использовать формат <input type="hidden" name="XX" value="YY">если вы хотите использовать другие значения вместо значений по умолчанию и/или не заботить пользователя выбором значения этого параметра. 8.4.4. Относительные ссылки в search.htmВозможно необходимо заметить, что search.htm обрабатывается в вашей cgi-bin директории. Позиция этой директории относительно корня определяется вашим веб-сервером независимо от ее расположения на файловой системе. Вполне вероятно, это http://your_document_root/cgi-bin/ . Т.к. search.cgi расположен в cgi-bin, любая ссылка на изображения или др. в search.htm подразумевает, что cgi-bin - базовая директория. Тем самым, если у вас фаловая система вида home/ home/your_document_root/ home/your_document_root/img/ home/cgi-bin/правильная относительная ссылка с search.cgi на изображения в img/ должна быть <img src="../img/image.gif">, несмотря на несоотвествие структуре фаловой системы. 8.4.5. Добавление формы поиска на другие страницыЧтобы добавить форму поиска на дюбой вашей страницы, разместите следующий код на этих страницах где сочтёте нужным: <FORM
METHOD=GET
ACTION="http://path-to-search.cgi">
<INPUT TYPE="text" NAME="q" VALUE="">
<INPUT TYPE="submit" VALUE="Search!">
</FORM>
8.5. Релевантность8.5.1. Упорядочивание документовПри сортировке документов перед выдачей результата поиска DataparkSearch по умолчанию учитывает два параметра каждого документа: релевантность и популярность. Сначала документы сортируются по релевантности, а при равенстве, по популярности. 8.5.2. Расчёт релевантностиРелевантность каждого документа вычисляется как косинус угла между вектором весов этого документа и вектором весов,
соответствующему поисковому запросу, умноженный на 100%.
Число координат векторов весов равно произведению числа слов в запросе
(с учётом всех словоформ и синонимов) на число секций, определённых в
indexer.conf. Каждая координата вектора весов соответсвует слову из запроса в той или иной секции
документа. И значение для этой координаты вычисляется на основе весов секций, заданных параметром Т.к. в файлах конфигурации поисковых фронтэндов (searchd.conf или search.htm) не предусмотрено указание секцией, используйте команду NumSections для указания числа используемых секций (по умолчанию оно равно 256). Впрочем, точное число секций не играет решающей роли в порядке сортировки документов, только в значении рейтинга релевантности. Таблица 8-3. Параметры расчёта релевантности, задаваемые при компиляции (ключи для configure)
8.5.3. Рейтинг популярностиDataparkSearch поддерживает два метода расчёта рейтинга популярности. Метод, использовавшийся в предыдущих версиях получил название Goo, а новый метод называется Neo. По умолчанию используется метод Goo. Чтобы выбрать нужный метод расчёта популярности используйте команду PopRankMethod: PopRankMethod Neo Для метода расчёта популярности Neo,а также для полного варианта метода Goo вам необходимо включить сбор ссылок между страницами командой CollectLinks yes в вашем файле конфигурации indexer.conf. Однако, это незначительно уменьшает скорость индексирования, поэтому по умолчанию сбор этих ссылок выключен. По умолчанию, для расчета рейтинга популярности используются только ссылки между различными сайтами.
Если в indexer.conf указана опция
Вы можете присвоить начальное значение рейтинга популярности страницы используя МЕТА таг DP.PopRank (см. Разд. 4.3>). 8.5.3.1. Метод расчёта популярности GooРейтинг популярности рассчитывается в два этапа. На первом этапе значение параметра
По умолчанию значение параметра Если в indexer.conf указана опция
Если в indexer.conf указана опция
Если в search.htm (или searchd.conf) указана опция
При этом методе расчёта популярности подразумевается, что страницы являются нейронами, а ссылки между страницами являются связями между нейронами. Такми образом для образованой нейросети можно использовать один методов её обучения - метод обратного распространения ошибки. Рейтингом популярности страницы в данном случае считается уровень активности соответствующего нейрона. См. краткое описание метода расчёта популярности Neo. Вы можете использовать команду
По умолчанию, расчёт рейтинга популярности методом "Neo" ведётся одновременно с индексирования. Для ускорения индексирования, вы можете отложить расчёт рейтинга популярности методом "Neo" указав команду: PopRankPostpone yes Затем вы можете расчитать рейтинг популярности методом "Neo" также как и для метода "Goo", т.е.: indexer -TR 8.5.4. Булевы запросыПри булевом поиске, состоящем из двух и более слов, необходимо вводить операторы (&, |, ~). Т.е. необходимо вводить a & book вместо a book. См. также Разд. 8.1.7>. 8.5.5. CrosswordsЭта возможность позволяет связать слова между <a href="xxx"> и </a> с документов, на который указывает данная ссылка. Для включения этой возможности, используйте команду CrossWords yes в indexer.conf и search.htm, а также определите секцию crosswords в файле sections.conf. 8.5.6. Алгоритм Построения Рефератов (SEA)Алгоритм Построения Рефератов (SEA) позволяет построить реферат из трёх наиболее релевантных предложений для каждого проиндексированого документа, состоящего из более 6 предложений. Чтобы включить эту возможность, добавьте эту команду в ваш файл seaction.conf: Section sea x yгде x - номер секции и y - максимальный размер значения секции, задайте его равным 0, если вы не хотите
показывать эту секцию на тсраницах результатов поиска.
Если вы указываете ненулевое значение для y, вы можете использовать мета-переменную $(sea)
в вашем шаблоне поиска для отображения реферата в результатах поиска.Соответствующие команды конфигурирования: Команда SEASentenceMinLength задаёт минимальную длину предложения, которое будет использовано для создания реферата. Значение по умолчанию: 32. Команда SEASentences используется для задания максимального числа предложений, используемых при построении реферата. Значение по умолчанию: 64. В виду нелинейной сложности алгоритма SEA, вы можете установить значение этого параметра исходя из желаемой производительности индексирования. При помощи команды SEASections вы можете указать список секций документов, по которым будут строиться рефераты. По умолчанию, для построения рефератов используется только секция "body". SEASections "body, title" 8.6. Регистрация поисковых запросовDataparkSearch поддерживает регистрацию поисковых запросов. При выполнении поисковых запросов, DataparkSearch использует таблицу qtrack для записи поискового запроса, IP адреса клиента, числа найденных документов и текущего времени в UNIX фомате, а также таблицу qinfo для записи всех параметров запроса. Для того, чтобы включить регистрацию запросов, добавьте параметер trackquery для соответсвующей команды DBAddr (см. Разд. 3.10.2>) вашего шаблона поиска search.htm. Например: DBAddr pgsql://user:pass@localhost/search/?dbmode=cache&trackquery
Регистрация запросов поиска полезна для получения статистики использования вашего поискового сервера. Для составления отчёта, вы можете, например, использовать следующий SQL-запрос: SELECT qwords,count(*),sum(found),avg(found) FROM qtrack GROUP BY qwords; 8.7. Кэш результатов поискаКэш результатов поиска обеспечивает быстрый ответ search.cgi на недавно повторенные запросы, а также при навигации от страницы к странице результатов того же поиска. Кэш результатов поиска выключен поумолчанию. Вам необходимо использовать команду "Cache yes" в search.htm для вкючения кэширования результатов поиска. Если используется searchd, команду "Cache yes" необходимо добавить в searchd.conf. Кэш результатов поиска располагается в поддиректории $PREFIX/var/cache/, где $PREFIX - корневая директория установки DataparkSearch. Результат каждого поиска хранится в виде отдельного файла.
8.8. Нечёткий поиск8.8.1. IspellКогда DataparkSearch используется с поддержкой ispell, для расширения поискового запроса нахождятся все грамматические формы введенных слов. При индексировании все найденные слова сохраняются в базе, а при поиске для каждого введенного слова находятся все его грамматические формы и уже с учетом всех этих форм производится поиск документов. Т.е., поисковик будет искать слово "test", если в качестве запроса введены слова "testing" или "tests". 8.8.1.1. Два типа файлов ispellDataparkSearch понимает два типа файлов ispell: файлы аффиксов и файлы словарей. Файл аффиксов Ispell состоит из правил для слов и имеет примерно такой формат: Flag V:
E > -E, IVE # As in create> creative
[ˆE] > IVE # As in prevent > preventive
Flag *N:
E > -E, ION # As in create > creation
Y > -Y, ICATION # As in multiply > multiplication
[ˆEY] > EN # As in fall > fallenФайл словаря Ispell содержит сами слова и имеет следующий формат: wop/S word/DGJMS wordage/S wordbook wordily wordless/P 8.8.1.2. Использование IspellДля использования ispell в DataparkSearch необходимо задать команды Affix и Spell в search.htm. Формат этих команд: Affix [язык] [кодировка] [имя файла аффиксов ispell] Spell [язык] [кодировка] [имя файла словаря ispell] Первый параметр обоих команд - стандартный двуюуквенный код языка. Воторой - имя кодировки, при помощи которой закодированы файлы ispell. Третий параметр указывает имя файла, абсолютное, или отностительно поддиректории etc/ корневой директории DataparkSearch
Если используется searchd, эти команды следует указывать в searchd.conf. Если DataparkSearch используется с поддержкой ispell, рекомендуется исопльзовать searchd, особенно для поддержки нескольких языков. Иначе время запуска search.cgi увеличивается. 8.8.1.3. Настройка словарейВозможно, на ваших страницах встретяться несколько редких слов, не включённых в словари ispell. В этом случае для построения всех форма слова выбирается запись с максимально совпадающим суффиксом. Вы также можете создать список таких слов по одному на каждую строку: rare.dict: ---------- webmaster intranet ....... www http --------- Вы также можете указать флаги ispel для этих слов (описание флагов ispel смотрите в документации ISpell) для поиска всех словоформ, например, "webmaster" и "webmasters". Попробуйте найти в словарях ispel слово с таким же способом образования различных форм и скопировать его флаги для нового слова. Например, словарь английского языка содержит такую строчку: postmaster/MS Таким образом, webmaster с флагом MS, возможно будет правильным: webmaster/MS Скопируйте составленный вами словарь в поддиректорию /etc корневой директории установки DataparkSearch и добавьте соответсвующие команды в файл конфигурации. 8.8.1.4. Где взять файлы IspellВы можете найти файлы Ispell для многих языков на этой странице. Для японского языка созданы квази-Ispell файлы, предназначенные для использования только с DataparkSearch. Вы можете скачать эти файлы с нашего веб-сервера или с одного из наших зеркал. См. Разд. 1.2>. 8.8.1.5. Модификация слов поисковых запросовQuffix [lang] [charset] [ispell-like suffix file name]Команда Quffix похожа на команду Affix, описанную выше, за исключением того, что эти правила применяются к словам, указанным в запросе, а не к их нормальным формам, как это происходит для команды Affix. Загружаемый файл должен содержать только суффиксные правила (в терминах афиксных файлов ispell). Эта команда предназначена, например, для указания правил перехода от одной части речи к другой в русском языке, когда это необходимо. 8.8.2. AspellКогда DataparkSearch используется с поддержкой aspell, возможно автоматическое расширение поискового запроса вариантами слов с исправленым правописанием. Чтобы включить эту возможность, необходимо установить Aspell на вашу систему до сборки DataparkSearch. Чтобы включить эту возможность, необходимо добавить команду AspellExtensions yes в файлы конфигурации indexer.conf и search.htm (или searchd.conf, если используется searchd). Автоматиская корректировка правописания при поиске происходит только при установке параметра поиска 8.8.3. СинонимыФайлы синонимов устанавливаются в поддиректорию etc/synonym относительно корневой директории установки DataparkSearch. Большие файлы синонимов для некоторых языков вы должны скачать отдельно с нашего сайта или с одного из наших зеркал, см. Разд. 1.2>. Для включения поддержки синонимов, добавьте в шаблон поиска search.htm команды вида Synonym <filename>, например: Synonym synonym/english.syn Synonym synonym/russian.syn Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории etc установки DataparkSearch. Если используется searchd, добавьте эти команды вместо шаблона поиска в searchd.conf. Вы можете создавать свои собственные списки синонимов. В качестве примера вы можете взять файл синонимов английского языка. В начале файла укажите следующие две команды: Language: en Charset: us-ascii
Дополнительно вы можете указать в списке синонимов команду: Thesaurus: yes Эта команда включает режим тезауруса для списка синонимов. В этом режиме только слова, расположенные на одной строке считаются синонимами. 8.8.4. Поиск без учёта акцентов над буквамиНачиная с версии 4.17 DataparkSearch также поддерживает нечувствительный к акцентам над буквами поиск. Чтобы включить поддержку этой возможности, используйте команду AccentExtensions в вашем шаблоне search.htm (или в файле конфигурации searchd.conf, если используется searchd) для автоматического построений копий слов из запроса без учёта акцентов над буквами, и в вашем файле конфигурации indexer.conf для автоматического добавления таких копий в базу. AccentExtensions yes Если команда AccentExtensions в файле конфигурации указана перед командами Spell и Affix, то копия этих данных без учёта акцентов над буквами будет загружаться автоматически. 8.8.5. Акронимы и аббревиатурыНачиная с версии 4.30 поддерживается нечёткий поиск на основе акронимов и аббревиатур. Файлы акронимов и аббревиатур устанавливаются в поддиректорию etc/acronym относительно корневой директории установки DataparkSearch. Для включения поддержки акронимов и аббревиатур, добавьте в шаблон поиска search.htm команды вида Acronym <filename>, например: Acronym acronym/en.fido.acr Acronym acronym/en.acr Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории etc установки DataparkSearch. Если используется searchd, добавьте эти команды вместо шаблона поиска в searchd.conf. Вы можете создавать свои собственные списки синонимов. В качестве примера вы можете взять файл синонимов английского языка. В начале файла укажите следующие две команды: Language: en Charset: us-ascii
Также вы можете расширять поисковые запросы при помощи регулярных выражений, задаваемых специальными коментариями в файлах акронимов. Например: #* regex last "([0-9]{2})[- \.]?([0-9]{2})[- \.]?([0-9]{2})" "+78622$1$2$3"Этот комментарий задает преобразование из широко используемого формата записи локалных телефонных номеров, 99-99-99, в канонический формат, +78622XXXXXX. Таким образом телефонные номера становится возможным искать независимо от формата, в котором они были записаны. Опция last здесь означает, что процесс применения регулярных выражений останавливается после применения этого правила. Пожалуйста, присылайте ваши списки синонимаов на адрес Глава 9. Разное9.1. Сообщение о багахПри составлении сообщения о баге, пожалуйста, указывайте версию DataparkSearch и сообщайте как моно больше информации о вашей проблеме. Такая информация, как используемая платформа, операционная система, версия базы данных, статистика базы данных (например, число URL в базе, или число записей в той или иной таблице базы данных) может быть весьма полезной для исправления возможной ошибки. Пожалуйста, сообщайте об ошибках и багах при помощи нашей Системы учёта ошибок доступной на веб-сервере DataparkSearch. Пожалуйста, не шлите сообщения об ошибках в списки рассылки или на почтовые адреса разработчиков! 9.1.1. Известные ошибки и багиИспользуйте Систему учёта ошибок DataparkSearch для простомтра текущих и исправленых ошибок. Вы можете использовать эту систему для сообщения о замеченых вами ошибках или предложения новых функций или улучшений. 9.1.2. Посмертные дампыЕсли indexer или search.cgi
умирают во время своей работы и оставляют посмертный дамп, очень полезно сообщить нам
вывод gdb (The GNU Debugger). Чтобы получить этот вывод, пожалуйста,
выполните следующие шаги. Убедитесь, что DataparkSearch собран с опцией Запустите GNU Debugger вместе с именем программы в качестве первого аргумента и с именем файла посмертного дампа в качестве второго: gdb indexer indexer.core Отобразится некоторая информация о месте трапа: Core was generated by `indexer'.
Program terminated with signal 8, Floating point exception.
Reading symbols from /usr/lib/libc.so.3...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0 0x80483f3 in main () at indexer.c:4
4 printf("%d",0/0);
Затем наберите команду thread apply all backtrace: (gdb) thread apply all bt #0 0x80483f3 in main () at indexer.c:4 #1 0x804837d in _start () Сообщите нам вывод в первом и втором случаях или просто скриншот сессии gdb. 9.2. Использование библиотеки libdpsearchПри компиляции DataparkSearch собирается и устанавливается libdpsearch - библиотека, с помощью которой легко расширить Ваше приложение возможностью поиска. Программа на СИ, использующая libdpsearch, должна включить заголовочный файл dpsearch.h. 9.2.1. Скрипт dps-configВ зависимости от параметров, выбраных при компиляции DataparkSearch, libdpsearch может требовать дополнительные библиотеки. Например, при использовании MySQL в качестве хранилища DataparkSearch, библиотека libmysqlclient также понадобится при линковки приложения с libdpsearch. В каталоге /bin относительно коренвой директории установки DataparkSearch вы можете найти скрипт dps-config Этот скрипт позволяет упростить процедуру учета всех необходимых зависимостей. dps-config понимает несколько опций командной строки. По-умолчанию dps-config выдает все доступные опции запуска:
Usage: ./dps-config [OPTIONS]
Options:
[--version]
[--libs]
[--cflags]
Запущенный с # ./dps-config --libs -lm -L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/local/dpsearch/lib -ldpsearch Вы можете включить вывод команды dps-config cc myprog.c -o myprog `dps-config --libs` 9.2.2. DataparkSearch APIОписания API DataparkSearch пока нет. Это связано с тем, что API находится под постоянным изменением от версии к версии, и пока не стабилизирован. В качестве примера приложения, использущего библиотеку libdpsearch, можно изучить программу search.c. 9.3. Структура таблиц базы данныхПолная структура таблиц базы данных, используемых DataparkSearch, описана в sql-скрптах создания структуры базы данных, находящихся в соответстувующих директориях поддиректории create. Таблица 9-1. Структура таблицы
Остальные параметры серверов хранятся в таблице Таблица 9-2. Значения некоторых параметров серверов в таблице
Предметный указатель
|