# Поиск документов
DataparkSearch - Полнофункциональная поисковая машина для Интернета и Интранета с открытым исходным кодом. Распространяется по лицензии GNU.
Keywords: shareware, freeware, интернет, unix, поисковик, поисковая машина, поиск, поиск информации, интранет, open source, opensource, search, searching, software, udmsearch, engine, indexing, system, web, ftp, http, cgi, php, SQL, MySQL, database, php3, FreeBSD, Linux, Unix, DataparkSearch, MacOS X, Mac OS X, Windows, 2000, NT, 95, 98, GNU, GPL, url, grabbing

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