Другое

Как настроить wordforms в Manticore с несколькими синонимами

Узнайте, как настроить wordforms в Manticore с несколькими синонимами для одного слова. Практические решения и примеры конфигурации для эффективного поиска.

Как настроить wordforms в Manticore с добавлением нескольких синонимов к указанному слову, а не только один?

Я настраиваю wordforms:
участок > уч-к

Это работает нормально, но что если мне нужно добавить несколько синонимов, например “уч-к”, “уч” и “тер”, “т-я”?

Я пробовал использовать формат “участок > уч-к уч” или “участок > уч-к | уч”, но понял, что все, что идет после >, ищется как единое слово для замены.

Если указать несколько строк:
участок > уч-к
участок > уч

То применяется только последняя строка.

Возможно ли настроить несколько синонимов для одного слова в Manticore? Кто сталкивался с такой задачей, подскажите решение.

Мой конфиг индекса:
index objectfias
{
type = rt
path = /var/lib/manticore/objectfias
rt_field = address
rt_field = objectidtree
rt_field = objectid
rt_attr_timestamp = _create
rt_attr_uint = ishouse
min_infix_len = 2
min_word_len = 2
expand_keywords = 1
html_strip = 1
morphology = stem_ru
dict = keywords
charset_table = 0…9, A…Z->a…z, a…z, U+410…U+42F->U+430…U+44F, U+430…U+44F, U+0401->U+0435, U+0451->U+0435, U+0419->U+0438, U+0439->U+0438, U+002D, U+002E, U+002F, U+005F, U+0020
stopwords = ru
wordforms = /etc/manticoresearch/wordforms_ru.txt
}

В Manticore Search wordforms по умолчанию поддерживают замену одного слова на другое, но не на несколько синонимов одновременно. Формат “слово > синоним1 синоним2” не работает, как вы обнаружили, а при указании нескольких строк для одного слова используется только последняя.


Содержание


Понимание ограничений wordforms

Wordforms в Manticore Search предназначены для замены одного слова на другое, а не на несколько синонимов. Как указано в документации Manticore Search, “wordforms feature can be used, which allows one or more words to be mapped to another one”.

Основные ограничения текущей реализации:

  • Формат замены: поддерживается только исходное_слово > заменяющее_слово
  • Множественные строки для одного слова: при дублировании записей для одного слова используется только последняя
  • Порядок применения: правила применяются в заданном порядке, но не для нескольких целевых слов

Важно: “If the same wordform definition is found in multiple files, the latter one is used and overrides previous definitions” - так работает механизм wordforms в Manticore.


Альтернативные подходы к решению

1. Использование нескольких записей с разными индексами

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

участок > уч-к
участок_1 > уч
участок_2 > тер
участок_3 > т-я

Недостаток: пользователи должны вводить разные формы слова для получения всех синонимов.

2. Создание “мостовых” синонимов

Использовать промежуточные слова для перенаправления:

участок > уч-к
уч-к > уч
уч-к > тер
уч-к > т-я

Недостаток: увеличивает количество правил и может замедлить поиск.

3. Использование исключений (exceptions)

Manticore Search также поддерживает exceptions, которые “allow mapping one or more tokens to a single keyword”. Исключения могут быть более гибкими для вашей задачи:

exception = участок
уч-к
уч
тер
т-я

Практические решения с примерами

Решение 1: Множественные записи с приоритетом

Наиболее рабочий подход - создать несколько записей, но с разными приоритетами через символы подчеркивания:

txt
# В файле /etc/manticoresearch/wordforms_ru.txt
участок > уч-к
уч-к > тер
уч-к > т-я
участок_1 > уч

Решение 2: Использование expand_keywords

В вашем конфигурации уже есть expand_keywords = 1. Этот параметр может помочь при поиске, но не решает проблему с wordforms.

Решение 3: Комбинированный подход

Создайте отдельный файл синонимов и используйте его вместе с wordforms:

txt
# wordforms_ru.txt
участок > уч-к
участок > тер
участок > т-я

# synonyms.txt (используется через другое поле)
exception = участок
уч-к
уч
тер
т-я

Решение 4: Нормализация через несколько полей

Если ваша схема позволяет, создайте несколько полей для адреса с разными уровнями нормализации:

sql
CREATE TABLE objectfias (
    address TEXT,
    address_normalized TEXT,
    address_extensive TEXT,
    -- другие поля
)

Оптимизация производительности

При работе с большим количеством синонимов учитывайте:

  1. Размер файла wordforms: чем больше правил, тем медленнее обработка
  2. Порядок правил: более общие правила должны быть ниже специфичных
  3. Индексация: перезапустите индекс после изменений в wordforms
  4. Кэширование: Manticore кэширует wordforms, поэтому изменения требуют перезапуска

Пример оптимизированного файла:

txt
# Сначала более общие правила
участок > уч-к
уч > тер
т-я > тер

# Затем более специфичные
участок_территория > участок

Рекомендации по организации файлов синонимов

Структура файла wordforms_ru.txt

txt
# Географические термины
участок > уч-к
уч > тер
т-я > тер
территория > тер

# Строительные термины
дом > д
дома > д
дому > д
домом > д

# Аббревиатуры
улица > ул
проспект > пр
переулок > пер

Организация нескольких файлов

Для больших проектов разделите синонимы по категориям:

txt
# Основной файл wordforms_ru.txt
wordforms = /etc/manticoresearch/wordforms_ru.txt
wordforms = /etc/manticoresearch/wordforms_geo.txt
wordforms = /etc/manticoresearch/wordforms_buildings.txt

Примечание: “If the same wordform definition is found in multiple files, the latter one is used and overrides previous definitions”


Заключение

  1. Основное ограничение: Manticore Search wordforms не поддерживают множественные синонимы для одного слова в одной записи
  2. Рабочие решения: используйте несколько записей с разными префиксами или создавайте “мостовые” правила
  3. Альтернатива: рассмотрите использование exceptions для более гибкого сопоставления
  4. Оптимизация: организуйте правила по категориям и следите за производительностью
  5. Совет: для сложных сценариев нормализации рассмотрите возможность создания нескольких полей поиска с разными уровнями обработки

Для вашей конкретной задачи с “участок” и его синонимами рекомендуется использовать комбинацию подходов: несколько записей с разными префиксами плюс отдельное поле с exceptions для наиболее важных синонимов.

Источники

  1. Manticore Search Manual - Wordforms
  2. Manticore Search Documentation - Wordforms Feature
  3. Manticore Search Manual - Exceptions
  4. Mike learning: REPLACE, UPDATE, wordforms
  5. Manticore Search 2.8.0 Documentation
Авторы
Проверено модерацией
Модерация