DataparkSearch Engine 4.48: Поисковая машина; Справочное руководство
Пред. | Глава 3. Индексирование | След.

# 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/

> Замечание: Обратите внимание на то, что при изменении порядка следования команд, алиас для каталога`/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. Алиасы в 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`

Пред. | Начало | След.
Указание веб-пространства для индексирования | Уровень выше | ServerTable