webtop
@webtop
Web developer

Как реализовать поиск адресов в ElasticSearch?

Приветствую друзья!

Делаю службу для поиска адресов России, за основу взял базу ФИАС (fias.nalog.ru/Public/DownloadPage.aspx)
Mapping: https://yadi.sk/i/XsVbhbgNfHozp

Есть 5 типов документов:
Регион (region), уровень 1
Район (district), уровень 3
Населенный пункт (locality), уровень 4, 5 и 6
Улица (street), уровень 7
Дом (house)

Есть еще 2 типа документов, это country и address_object_type, первый пока не используется, но в будущем думаю расширить базу адресов. В address_object_type хранится таблица socrbase.DBF из ФИАС.

Задача заключается в поиске полного адреса по всей базе.
Полный адрес должен выглядеть примерно так: Страна, регион, район, населенный пункт, улица, дом

Пока я решил эту задачу следующим образом: создал в elasticsearch новый тип документа address. Для каждой записи дома я записываю в address запись дома со ссылками на регион, район, нас. пункт, улицу, дом и еще одно поле fullTitle, которое содержит полный адрес. И, как вы уже догадались, поиск выполняется только по полю fullTitle.

Хотелось бы избавиться от документа address и выполнять поиск адреса по всей базе сразу.

Спасибо!
  • Вопрос задан
  • 2880 просмотров
Пригласить эксперта
Ответы на вопрос 1
MintTea
@MintTea
Делал что-то похожее с использованием эластика и фиаса, могу оставить пару комментариев:

1. В эластике данные, как правило, хранятся в денормализованном виде, и это нормально. Избавляться от типа address в таком случае не надо, даже более - это единственный вариант, с которым вы можете хоть что-то найти в вашем индексе (почитайте, как строится TF/IDF для оценки релевантности)

2. Полнотекстовый поиск по адресам - сомнительное решение. Тут должны применяться фильтры.

3. Фиас это треш и угар. Мы *бались с ним полгода и в итоге выкинули, перейдя на собственную бд/модель местоположений
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы