Есть rt-индекс. Сейчас морфология настроена на лемматизацию 3 основных языков (рус, англ, нем):
morphology = lemmatize_ru, lemmatize_en, lemmatize_de
В ближайшее время будут добавлены настройки обработки и других языков, но уже по стемме (французский, итальянский и т.д.). Сейчас поиск по ключевым словам выполняется просто замечательно. Возникла задача поиска номерной информации. Что в данном случае может являться номерной информацией:
1) 423452352364265 - просто какая-то последовательно цифр
2) 42-3452352(36426)5 последовательность с различными разделителями
Какой функционал поиска по номерной информации необходим:
1) Полное совпадение:
Предположительный пример запроса
SELECT * FROM rt_index where match('423452352364265');
2) Начинается с:
Предположительный пример запроса
SELECT * FROM rt_index where match('42345*');
3) Содержит:
Предположительный пример запроса
SELECT * FROM rt_index where match('*523642*');
4) Заканчивается на:
Предположительный пример запроса
SELECT * FROM rt_index where match('*265');
В результатах этих запросов я хотел бы получать обе представленные выше записи.
Поскольку я буду использовать индекс, построенный по лемме и стемме, то поиск по звездочке (*), как я понимаю, работать не будет. Ну и даже, если бы можно было использовать *, индекс бы разросся неимоверно.
Какое вижу единственное решение. Делать предобработку текста, доставать всю номерную информацию, чистить от разделителей и укладывать в соседнее поле. Настроить еще один индекс (стемма, поиск по звездочке) на поиск только по данному полю. При номерном поиске - искать только в данной колонке. Топорное решение, но скорее всего будет работать. Опять же возникает некоторая проблема с сопоставлением преобразованного номера с номером в тексте.
Может есть другие более элегантные решения?