DataparkSearch Engine 4.53: Справочное руководство
Пред. |  | След.

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

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

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

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

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

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

Чтобы найти фразу, просто заключите её в кавычки. Например: `"uncontrollable sphere"`.

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

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

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

q | текстовый параметр, содержащий запрос на поиск
vq | текстовый параметр, содержащий поисковый запрос на языке Verity Query Language (префиксный вариант), см Разд. 8.1.8>. Чтобы использовать этот параметр, необходимо омтавить пустым параметр q.
s | строка символов, задающая порядок сортировки результатов поиска. Порадок сортировки задаётся слева направо. Большая буква соответсвует сортировке по убыванию, маленькая - по возрастанию. Возможные символы: `R` или `r` - сортировка по релевантности, `P` или `p` - сортировка по PopularityRank, `I` или `i` - сортировка по важности (произведению релевантности и PopularityRank), `A` или `a` - сортировка по сумме релевантности и PopularityRank, `D` или `d` - сортировка по дате последнего изменения документа. Значение по умолчанию: `RP`.
ps | число результатов поиска, отображаемых на одной странице, 20 по умолчанию. Максимальное значение равно 100. Это ограничение введено во избежание излишней перегрузки сервера и может быть изменено заменой значения MAX_PS в файле `search.c`.
np | номер страницы начиная с 0, 0 по умолчанию (первая страница)
p | номер страницы начиная с 1, для использования с OpenSearch
m | Режим поиска. На данный момент поддерживаются значения `all`, `any`, `near` и `bool`.
wm | Совпадение слова. Вы можете использовать этот параметр для указания способа совпадения слов. Зачения `wrd`, `beg`, `end` и `sub` соответственно обозначают целое слово, начало слова, окончание слова и подстрока слова.
t | Лимит по тэгу. Задаёт поиск только среди документов, помеченых указаным тэгом. Этот параметр имеет то же значение, что и ключ `-t` у indexer.
c | Лимит по категории. См. Разд. 6.2> для описания.
ul | Лимит по URL, подстрока URL для ограничения поиска по части базы. Поддерживаются SQL шаблоны % и _. Этот параметр имеет тот же эффект, что и ключ `-u` у indexer. Если указан неабсолютный URL, `search.cgi` дообавит знаки % до и после значения этого параметра, если используется SQL база данных для хранения информации. Например, <OPTION VALUE="/manual/"> а не VALUE="%/manual/%". Если указан полный URL (с указанием схемы)б `search.cgi` добавляет знак % только после значения этого параметра. Например, для <OPTION VALUE="http://localhost/"> `search.cgi` передаст `http://localhost/%` в оператор SQL LIKE. Не поддерживается для способа хранения cache.
wf | Значения весов. Позволяет изменить значения весов различных секций документов во аремя поиска. Значение должно представлять из себя строку шестнадцатеричных чисел. См. обяснение ниже в Разд. 8.1.3>.
g или lang | Лимит по языку. Стандартный двубуквенный код языка по ISO, для ограничения поиска по полю url.lang.
tmplt | Имя файла шаблона (без пути). Для указания имени файла шаблона, отличного от стандартного `search.htm`.
type | Лимит по Content-Type. Для способа хранения cache должно быть точное соответсвие. Для SQL-режимов возможно использование шаблонов SQL.
sp | Ограничение использования словоформ. =1, если необходим поиск по всем словоформам (включая корректировку правописания, если включена поддержка aspell) введённых слов. =0, если необходим поиск только введенных форм слов. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.
sy | Ограничение использования синонимов. =1, если необходимо использовать синонимы введённых слов. =0, не использовать синонимы. Значение по умолчанию равно 1. Вы можете указать значение 0 для ускорения поиска.
empty | Использовать ли лимиты для вывода результатов, если не задано ни одного слова в запросе. =yes, использовать лиминты для вывода результатов, если не задано ни одного слова в запросе (по умолчанию). =no, не использовать.
dt | Ограничение по времени. Поддерживается три типа. Если `dt` равно `back`, это означает, что вы хотите ограничить результаты поиска по давности. Давность ограничивается параметром `dp`. Если `dt` равно `er`, это означает, что поиск поиск будет ограничен страницами старше или новее указаной даты. Старше/новее задаётся параметром `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 - четырёхцифровой год.

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

Параметр `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.

## 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` определяет имя шаблона:

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

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

3. `search.cgi` проверяет path info часть URL, доступную через переменную окружения PATH_INFO. Например, `http://localhost/cgi-bin/search.cgi/search1.html` в качестве шаблона использует `search1.htm`, а `http://localhost/cgi-bin/search.cgi/search2.html` использует `search2.htm`, и т.д.

4. `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.

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

   См. также Разд. 7.2>

## 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. Булев поиск

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

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

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

`NEAR` - Оператор NEAR принимает истиное значение если оба слова находятся не далее, чем в 16 словах друг от друга. Например, `mysql NEAR odbc`. DataparkSearch будет искать URL, содержащие оба слова "mysql" и "odbc", расположеные на расстоянии не далее 16 слов друг от друга.

`ANYWORD` или `*` - Оператор ANYWORD аналогичен оператору И, но принимает истиное значение, если между обеими словами находится одно любое слово и левый операнд имеет меньшую позицию, нежели правый. Например, "`mysql * odbc`" - DataparkSearch найдёт все документы, содержащие оба слова "mysql" и "odbc", и меющие любое слово между ними, например, документы с фразой "mysql via odbc".

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

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

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

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

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

## 8.1.8. Язык запросов Verity Query Language, VQL

DataparkSearch поддерживает только префиксный вариант Verity Query Language.

Также поддерживается только следующее подмножество операторов VQL:

Таблица 8-2. Операторы VQL, поддерживаемые DataparkSearch

<ACCRUE> | эквивалентен оператору `OR` булевого запроса.
<AND> | эквивалентен оператору `AND` булевого запроса.
<ANY> | эквивалентен оператору `OR` булевого запроса.
<NEAR> | эквивалентен оператору `NEAR` булевого запроса.
<NOT> | эквивалентен оператору `NOT` булевого запроса.
<OR> | эквивалентен оператору `OR` булевого запроса.
<PHRASE> | эквивалентен фразе в булевом запросе.
<WORD> | рассматривается как пустой оператор.

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

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

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