DataparkSearch 4.26 Руководство: Поисковая машина
Пред. |  | След.

# Глава 8. Поиск документов

# Использование поисковых фронт-эндов

## Осуществление поиска

Откройте предпочитаймый вами фронт-энд в окне броузера:

    http://your.web.server/path/to/search.cgi

Чтобы найти что-то, просто наберите слова, которые хотите найти и нажмите кнопку ОТОСЛАТЬ. Например, "`mysql odbc`". Вы не должны использовать кавычки " в запросе, они записаны только чтобы отделить запрос от остального текста. DataparkSearch найдет все документы, содержащие слово "mysql" и/или слово "odbc". Лучшие документы, имеющий более высокую релевантность и популярность будут показаны первыми.

## Параметры поиска

Фронт-энды DataparkSearch поддерживают следующие параметры, указываемыме в CGI-запросе. Вы можете использовать их в HTML форме на странице поиска.

Таблица 8-1. Параметры поиска

q | текстовый параметр, содержащий запрос на поиск

s

строка символов, задающая порядок сортировки результатов поиска. Порадок сортировки задаётся слева направо. Большая буква соответсвует сортировке по убыванию, маленькая - по возрастанию. Возможные символы: `R` или `r` - сортировка по релевантности, `P` или `p` - сортировка по PopularityRank, `I` или `i` - сортировка по важности (произведению релевантности и PopularityRank), `A` или `a` - сортировка по сумме релевантности и PopularityRank, `D` или `d` - сортировка по дате последнего изменения документа. Значение по умолчанию: `RP`.

ps | число результатов поиска, отображаемых на одной странице, 20 по умолчанию. Максимальное значение равно 100. Это ограничение введено во избежание излишней перегрузки сервера и может быть изменено заменой значения MAX_PS в файле `search.c`.
np | номер страницы, 0 по умолчанию (первая страница)
m | Режим поиска. На данный момент поддерживаются значения `all`, `any` и `bool`.
wm | Совпадение слова. Вы можете использовать этот параметр для указания способа совпадения слов. Зачения `wrd`, `beg`, `end` и `sub` соответственно обозначают целое слово, начало слова, окончание слова и подстрока слова.
t | Лимит по тэгу. Задаёт поиск только среди документов, помеченых указаным тэгом. Этот параметр имеет то же значение, что и ключ `-t` у indexer.
cat | Лимит по категории. См. Разд. Категории в Гл. 6 для описания.

ul

Лимит по URL, подстрока URL для ограничения поиска по части базы. Поддерживаются SQL шаблоны % и _. Этот параметр имеет тот же эффект, что и ключ `-u` у indexer. Если указан неабсолютный URL, `search.cgi` дообавит знаки % до и после значения этого параметра, если используется SQL база данных для хранения информации. Например, <OPTION VALUE="/manual/"> а не VALUE="%/manual/%". Если указан полный URL (с указанием схемы)б `search.cgi` добавляет знак % только после значения этого параметра. Например, для <OPTION VALUE="http://localhost/"> `search.cgi` передаст `http://localhost/%` в оператор SQL LIKE.

> Не поддерживается для способа хранения cache.

wf | Значения весов. Позволяет изменить значения весов различных секций документов во аремя поиска. Значение должно представлять из себя строку шестнадцатеричных чисел. См. обяснение ниже в Разд. Изменение весов различных частей документов во время поиска.
g или lang | Лимит по языку. Стандартный двубуквенный код языка по ISO, для ограничения поиска по полю url.lang.
tmplt | Имя файла шаблона (без пути). Для указания имени файла шаблона, отличного от стандартного `search.htm`.
type | Лимит по Content-Type. Для способа хранения cache должно быть точное соответсвие. Для SQL-режимов возможно использование шаблонов SQL.
sp | Ограничение использования словоформ. =1, если необходим поиск по всем словоформам введённых слов. =0, если необходим поиск только введенных форм слов. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.
sy | Ограничение использования синонимов. =1, если необходимо использовать синонимы введённых слов. =0, не использовать синонимы. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.

dt

Ограничение по времени. Поддерживается три типа.

Если `dt` равно `back`, это означает, что вы хотите ограничить результаты поиска по давности. Давность ограничивается параметром `dp`.

Если `dt` равно `er`, это означает, что поиск поиск будет ограничен страницами старше или новее указаной даты. Старше/новее задаётся параметром `dx`. Дата задаётся параметрами `dm, dy, dd`.

Если `dt` равно `range`, обозначает, что поиск будет ограничен двумя датами, начала и конца. Даты задаются двумя параметрами, соответственно `db` и `de`.

dp

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

      4h30m 	  - 2 часа и 30 минут
      1Y6M-15d        - 1 год и шесть месяцев минус 15 дней
      1h-60m+1s       - 1 час минус 60 минут плюс 1 секунда

dx | Флаг старше/новее, если значение `dt` равно `er`. =1 - новее. =-1 - старше.
dm | Месяц даты, если значение `dt` равно `er`. 0 - январь, 1 - февраль, ... 11 - декабрь.
dy | Год даты, если значение `dt` равно `er`. Четыре цифры. Например, 1999 или 2001.
dd | День даты, если значение `dt` равно `er`. 1...31.
db | Начальная дата интервала, если значение `dt` равно `range`. Дата указывается как строка в формате dd/mm/yyyy, где dd - день, mm - месяц, а yyyy - четырёхцифровой год.
de | Конечная дата интервала, если значение `dt` равно `range`. Дата указывается как строка в формате dd/mm/yyyy, где dd - день, mm - месяц, а yyyy - четырёхцифровой год.

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

Параметр `wf`, передаваемый в `search.cgi` задаёт веса для различных секций документов. См. раздел "Section" в файле `indexer.conf-dist`.

Для использования этой возможности необходимо иметь уникальные ID для различных секций документов, указываемых в командах Section файла конфигурации `indexer.conf` command. На данный момент поддерживается до 256 различных секций.

Предположим, что в `indexer.conf` определены следующие секции:

      Section body        1  256
      Section title       2  128
      Section keywords    3  128
      Section description 4  128

Значение `wf` - строка шестнадцатиричных цифр ABCD. Каждая цифра - вес соответствующей секции документа. Самая правая цифра соответсвует секции 1. Для указанной выше конфигурации секций:

D - вес для секции 1 (body)
C - вес для секции 2 (title)
B - вес для секции 3 (keywords)
A - вес для секции 4 (description)

Примеры:

wf=0001 поиск только по секции body.
wf=1110 поиск по секциям title,keywords,desctription, но не по секции body.
wf=F421 поиск по:
Description с весом 15 (F hex)
Keywords с весом 4
Title с весом 2
Body с весом 1

По умолчанию, все секции имеют вес 1.

По умолчанию, DataparkSearch собирается с быстрым вариантом расчёта релевантности. В этом случае только нулевое или ненулевое значение веса имеет смысл (это позволяет только включать/исключать заданые секции из результатов поиска). Чтобы включить полную поддержку динамических весов секций, необходимо задать опцию `--enable-fullrel` для configure во время сборки DataparkSearch.

## Использование фронт-энда на страницах с 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

## Использование нескольких шаблонов

Зачастую необходимо использовать несколько различных шаблонов с одним и тем же `search.cgi`. Существует несколько способов сделать это. Они указываются ниже в том порядке, в каком `search.cgi` определяет имя шаблона:

1. `search.cgi` проверяет CGI параметр `tmplt`. Таким образом вы можете задать имя файла нужного шаблона в этом параметре.

2. `search.cgi` проверяет переменную окружения `DPSEARCH_TEMPLATE`. Таким образом вы можете установить путь до нужного шаблона в этой переменной.

3. `search.cgi` также поддерживает внуттрений релирект Apache. Он проверяет переменных окружения `REDIRECT_STATUS` и `REDIRECT_URL`. Для использования этого способа указания шаблона, необходимо добавить следующие строчки в файл конфигурации Apache `httpd.conf`:

                      AddType text/html .zhtml
                      AddHandler zhtml .zhtml
                      Action zhtml /cgi-bin/search.cgi

   Поместите `search.cgi` в вашу `/cgi-bin/` директорию. Затем поместите HTML-шаблон на вашем сервере с расширением .zhtml, например, `template.zhtml`. Теперь вы можете открыть страницу поиска: `http://www.site.com/path/to/template.zhtml` Конечно, вы можете использовать любое свободное расширение вместо .zhtml.

4. Если два предыдущих способа не помогли определить имя шаблона, `search.cgi` откроет шаблон с тем же именем, что и выполняемая CGI-программа, имя которой указано в переменной окружения `SCRIPT_NAME`. Т.е. `search.cgi` бужет использовать шаблон `ETC/search.htm`, `search1.cgi` будет использовать шаблон `ETC/search1.htm` и т.д., где ETC - `/etc` директория DataparkSearch (обычно это `/usr/local/dpsearch/etc`). Таким образом вы можете использовать без перекомпиляции тот же самый search.cgi с различными шаблонами. Просто создайте несколько линков на search.cgi с различными именами, соответствующими нужным шаблонам в директории `/etc` DataparkSearch.

   См. также Разд. Создание многоязычных страниц поиска в Гл. 7

## Булев поиск

Для задания более сложных запросов, вы можете строить булевы запросы поиска. Необходимо в поисковой форме указать режим поиска `bool`.

DataparkSearch понимает следющие булевы операторы:

`AND` или `&` - логическое И. Например, `mysql & odbc`. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc". Вы также можете использовать знак `+` для этого оператора.

`OR` или `|` - логическое ИЛИ. Например, `mysql|odbc`. DataparkSearch будет искать URL, содержащие или слово "mysql" или слово "odbc".

`NOT` или `~` - логическое НЕ. Например, `mysql & ~odbc`. DataparkSearch будет искать URL, содержащие слово "mysql" и в тоже время не содержащие слово "odbc". Обратите внимание, что ~ всего лишь исключает некоторые документы из результата поиска. Запрос "~odbc" ничего не найдёт!

`()` - оператор группирования для создания более сложных запросов поиска. Например, `(mysql | msql) & ~postgres`.

`"` - оператор выделения фраз. Например, `"russian apache" & "web server"`. Вы также можете использовать знак `'` для этого оператора.

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

## Как используются при поиске устаревшие документы

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

Пред. | Начало | След.
Поддержка мультиязычных веб серверов |  | Модуль `mod_dpsearch` для Apache httpd