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

# Нечёткий поиск

## Ispell

Когда DataparkSearch используется с поддержкой `ispell` все слова нормализуются. Это позволяет найти все грамматические формы введенного слова. При индексировании все найденные слова сохраняются в базе, в при поиске для каждого введенного слова находятся все его грамматические формы и уже с учетом всех этих форм производится поиск документов. Т.е., поисковик будет искать слово "test", если в качестве запроса введены слова "testing" или "tests".

### Два типа файлов ispell

DataparkSearch понимает два типа файлов ispell: файлы аффиксов и файлы словарей. Файл аффиксов `Ispell` состоит из правил для слов и имеет примерно такой формат:

    Flag V:
           E   > -E, IVE      # As in create> creative
          [^E] > IVE          # As in prevent > preventive
    Flag *N:
           E   > -E, ION      # As in create > creation
           Y   > -Y, ICATION  # As in multiply > multiplication
         [^EY] > EN           # As in fall > fallen

Файл словаря `Ispell` содержит сами слова и имеет следующий формат:

    wop/S
    word/DGJMS
    wordage/S
    wordbook
    wordily
    wordless/P

### Использование Ispell

Для использования `ispell` в DataparkSearch необходимо задать команды Affix и Spell в `search.htm`. Формат этих команд:

    Affix [язык] [кодировка] [имя файла аффиксов ispell]
    Spell [язык] [кодировка] [имя файла словаря ispell]

Первый параметр обоих команд - стандартный двуюуквенный код языка. Воторой - имя кодировки, при помощи которой закодированы файлы `ispell`. Третий параметр указывает имя файла, абсолютное, или отностительно поддиректории `etc/` корневой директории DataparkSearch

> Замечание: Поддерживает загрузка данных для нескольких языков, например:

>     Affix en iso-8859-1 en.aff
>     Spell en iso-8859-1 en.dict
>     Affix de iso-8859-1 de.aff
>     Spell de iso-8859-1 de.dict

> Будет загружена поддержка для английского и немецкого языков.

Если используется searchd, эти команды следует указывать в `searchd.conf`.

Если DataparkSearch используется с поддержкой `ispell`, рекомендуется исопльзовать searchd, особенно для поддержки нескольких языков. Иначе время запуска `search.cgi` увеличивается.

### Настройка словарей

Возможно, на ваших страницах встретяться несколько редких слов, не включённых в словари `ispell`. Вы можете создать список таких слов по одному на каждую строку:

    rare.dict:
    ----------
    webmaster
    intranet
    .......
    www
    http
    ---------

Вы также можете указать флаги `ispel` для этих слов (описание флагов `ispel` смотрите в документации `ISpell`) для поиска всех словоформ, например, "webmaster" и "webmasters". Попробуйте найти в словарях `ispel` слово с таким же способом образования различных форм и скопировать его флаги для нового слова. Например, словарь английского языка содержит такую строчку:

`postmaster/MS`

Таким образом, webmaster с флагом MS, возможно будет правильным:

`webmaster/MS`

Скопируйте составленный вами словарь в поддиректорию `/etc` корневой директории установки DataparkSearch и добавьте соответсвующие команды в файл конфигурации.

### Где взять файлы Ispell

Вы можете найти файлы Ispell для многих языков на этой странице.

## Синонимы

Начиная с версии 3.2 поддерживается нечёткий поиск на основе синонимов.

Файлы синонимов устанавливаются в поддиректорию `etc/synonym` относительно корневой директории установки DataparkSearch.

Для включения поддержки синонимов, добавьте в шаблон поиска `search.htm` команды вида `Synonym <filename>`, например:

    Synonym synonym/english.syn
    Synonym synonym/russian.syn

Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории `etc` установки DataparkSearch.

Если используется `searchd`, добавьте эти команды вместо шаблона поиска в `searchd.conf`.

Вы можете создавать свои собственные списки синонимов. В качестве примера вы можете взять файл синонимов английского языка. В начале файла укажите следующие две команды:

    Language: en
    Charset:  us-ascii

- `Language` - стандартный (ISO 639) двубуквенный код языка.

- `Charset` - любая кодировка, поддерживаемая DataparkSearch (see Разд. Кодировки в Гл. 7). Список синонимов должен быть закодирован с использованием этой кодировки.

## Поиск без учёта акцентов над буквами

Начиная с версии 4.17 DataparkSearch также поддерживает нечувствительный к акцентам над буквами поиск.

Чтобы включить поддержку этой возможности, используйте команду AccentExtensions в вашем шаблоне `search.htm` (или в файле конфигурации `searchd.conf`, если используется searchd) для автоматического построений копий слов из запроса без учёта акцентов над буквами, и в вашем файле конфигурации `indexer.conf` для автоматического добавления таких копий в базу.

    AccentExtensions yes

Пред. | Начало | След.
Кэш результатов поиска | Уровень выше | Разное