Формы слов

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

wordforms

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

Словарь форм слов. Необязательный параметр, по умолчанию пуст.

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

‹›
  • 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 раза. Скорость поиска не затрагивается вообще. Дополнительное влияние на оперативную память примерно равно размеру файла словаря, и словари являются общими для всех таблиц. Например, если один и тот же файл форм слов размером 50 МБ указан для 10 разных таблиц, дополнительное использование оперативной памяти 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'

wordforms_list

wordforms_list = 'source-form > destination-form; ...'

Настройка wordforms_list позволяет указать формы слов непосредственно в операторе CREATE TABLE. Поддерживается только в режиме RT.

Значения должны быть разделены точкой с запятой (;). Поскольку формы слов могут содержать > или => в качестве разделителей и, возможно, другие специальные символы, убедитесь, что экранируете точки с запятой, если они являются частью самой формы (например, \;).

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
📋
CREATE TABLE products(title text, price float) wordforms_list = 'walks > walk; walked > walk'
Last modified: February 07, 2026