Как настроить 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
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: Множественные записи с приоритетом
Наиболее рабочий подход - создать несколько записей, но с разными приоритетами через символы подчеркивания:
# В файле /etc/manticoresearch/wordforms_ru.txt участок > уч-к уч-к > тер уч-к > т-я участок_1 > уч
Решение 2: Использование expand_keywords
В вашем конфигурации уже есть expand_keywords = 1. Этот параметр может помочь при поиске, но не решает проблему с wordforms.
Решение 3: Комбинированный подход
Создайте отдельный файл синонимов и используйте его вместе с wordforms:
# wordforms_ru.txt участок > уч-к участок > тер участок > т-я # synonyms.txt (используется через другое поле) exception = участок уч-к уч тер т-я
Решение 4: Нормализация через несколько полей
Если ваша схема позволяет, создайте несколько полей для адреса с разными уровнями нормализации:
CREATE TABLE objectfias (
address TEXT,
address_normalized TEXT,
address_extensive TEXT,
-- другие поля
)
Оптимизация производительности
При работе с большим количеством синонимов учитывайте:
- Размер файла wordforms: чем больше правил, тем медленнее обработка
- Порядок правил: более общие правила должны быть ниже специфичных
- Индексация: перезапустите индекс после изменений в wordforms
- Кэширование: Manticore кэширует wordforms, поэтому изменения требуют перезапуска
Пример оптимизированного файла:
# Сначала более общие правила участок > уч-к уч > тер т-я > тер # Затем более специфичные участок_территория > участок
Рекомендации по организации файлов синонимов
Структура файла wordforms_ru.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”
Заключение
- Основное ограничение: Manticore Search wordforms не поддерживают множественные синонимы для одного слова в одной записи
- Рабочие решения: используйте несколько записей с разными префиксами или создавайте “мостовые” правила
- Альтернатива: рассмотрите использование exceptions для более гибкого сопоставления
- Оптимизация: организуйте правила по категориям и следите за производительностью
- Совет: для сложных сценариев нормализации рассмотрите возможность создания нескольких полей поиска с разными уровнями обработки
Для вашей конкретной задачи с “участок” и его синонимами рекомендуется использовать комбинацию подходов: несколько записей с разными префиксами плюс отдельное поле с exceptions для наиболее важных синонимов.