Формы слов

Формы слов применяются после токенизации входящего текста по правилам charset_table. Они по сути позволяют заменить одно слово другим. Обычно это используется для приведения различных форм слова к одной нормальной форме (например, нормализация всех вариантов таких как "walks", "walked", "walking" к нормальной форме "walk"). Также это может использоваться для реализации исключений стемминга, поскольку стемминг не применяется к словам, найденным в списке форм.

wordforms

wordforms = path/to/wordforms.txt
wordforms = path/to/alternateforms.txt
wordforms = path/to/dict*.txt

Словарь форм слов. Опционально, по умолчанию пустой.

Словари форм слов используются для нормализации входящих слов как при индексации, так и при поиске. Поэтому, когда речь идет о plain table, требуется выполнить ротацию таблицы, чтобы применить изменения в файле форм слов.

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • CONFIG
📋
CREATE TABLE products(title text, price float) wordforms = '/var/lib/manticore/wordforms.txt' wordforms = '/var/lib/manticore/alternateforms.txt /var/lib/manticore/dict*.txt'

Поддержка форм слов в Manticore разработана для эффективной работы с большими словарями. Они умеренно влияют на скорость индексации; например, словарь с 1 миллионом записей замедляет полнотекстовую индексацию примерно в 1.5 раза. Скорость поиска при этом не страдает. Дополнительное потребление RAM примерно равно размеру файла словаря, и словари разделяются между таблицами. Например, если один и тот же файл форм слов размером 50 МБ указан для 10 разных таблиц, дополнительное потребление RAM searchd будет около 50 МБ.

Файл словаря должен быть в простом текстовом формате. Каждая строка должна содержать исходную и целевую формы слова в кодировке UTF-8, разделённые знаком "больше" (>). Правила из charset_table будут применены при загрузке файла. Поэтому, если вы не изменяете charset_table, ваши формы слов будут нечувствительны к регистру, как и остальные данные, индексируемые полнотекстово. Ниже приведён пример содержимого файла:

‹›
  • Example
Example
📋
walks > walk
walked > walk
walking > walk

В комплекте есть утилита Spelldump, которая помогает создать файл словаря в формате, читаемом Manticore. Утилита может читать исходные файлы словарей .dict и .aff в формате ispell или MySpell, как в комплекте с OpenOffice.

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

Вы можете использовать символ => вместо >. Также допускаются комментарии (начинающиеся с #). Наконец, если строка начинается с тильды (~), форма слова будет применена после морфологии, а не до (обратите внимание, что в этом случае поддерживается только одно исходное и одно целевое слово).

‹›
  • Example
Example
📋
core 2 duo > c2d
e6600 > c2d
core 2duo => c2d # Some people write '2duo' together...
~run > walk # Along with stem_en morphology enabled replaces 'run', 'running', 'runs' (and any other words that stem to just 'run') to 'walk'

Если вам нужно использовать >, = или ~ как обычные символы, вы можете экранировать их, предваряя обратным слэшем (\). И >, и = должны быть экранированы таким образом. Вот пример:

‹›
  • Example
Example
📋
a\> > abc
\>b > bcd
c\=\> => cde
\=\>d => def
\=\>a \> f \> => foo
\~g => bar

Вы можете указать несколько целевых токенов:

‹›
  • Example
Example
📋
s02e02 > season 2 episode 2
s3 e3 > season 3 episode 3

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

В режиме RT допускаются только абсолютные пути.

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

‹›
  • SQL
  • Config
📋
create table tbl1 ... wordforms='/tmp/wf*'
create table tbl2 ... wordforms='/tmp/wf, /tmp/wf2'
Last modified: August 28, 2025