3.7. Алиасы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.7.5. Команда AliasProg

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

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

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

3.7.6. Команда ReverseAlias

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

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

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

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

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

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

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

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

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

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

3.7.7. Команда ReverseAliasProg

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

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

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

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

Alias <find-prefix> <replace-prefix>

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

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

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