Доброго времени суток.
Хочу перевести телефонный справочник сотрудников (3 основных поля - Фио, номер и заметка) из MS SQL на Elastic (так исторически сложилось, что в заметках о сотрудниках содержится значимая текстовая информация, хочу использовать возможности Elastic для поиска в ней).
Вопрос такой: какие оптимальные настройки следует задать для того, чтобы находить телефон полностью, если пользователь введёт через 8 или +7,или по нескольким последним цифрам (телефоны - русские сотовые и городские, могут быть с кодом города и без)
Тире и плюс и пр. я смогу отсечь с помощью фильтра символов, а вот как лучше задать
tokenizer и фильтры токенов?
Спасибо.
А номера в индексе будут только российские? Другими словами, номера других стран не гарантировано не появятся и код страны можно отбросить? Правильно ли я понял, что поиск нужен только по окончанию телефона?
Спасибо за ответ. Номера - да, гарантированно только российские, сотовые и городские (как с кодом города, так и без)
Поиск может быть и по окончанию телефона, по префиксу оператора (например группе людей выдавались корпоративные симки формата 8999*******, найти их всех), также по номеру целиком, но думаю, целесообразно по крайней мере задать фильтр
min_filter": {
"type": "length",
"min": 3
},
чтобы юзеры ерунду всякую не вводили
Я бы как-то так начал:
POST _analyze
{
"tokenizer": "keyword",
"char_filter": [
{
"type": "pattern_replace",
"pattern": "^\\+7|^8|[^01234567890]",
"replace": ""
}
],
"text": ["8 123-456+78-90", "+7123 456 78 90", "456 78 90", "+71(234) ерунда 5678"]
}
Для поиска по суффиксам/префиксам, если база большая и wildcards не справляются, то можно проиндексировать пару раз с edge_ngram, и edge_ngram вместе с reverse.
Спасибо за ответ. Попробую на данных, отпишусь.
Ещё вопросик разрешите: что почитать по поводу применения Elastic к анализу русского текста? Есть где нибудь мануал? (чтобы здесь лишний раз не спамить)