Інтеграція ФІАС для адресних підказок на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція ФІАС для адресних підказок на сайті
Проста
від 4 годин до 2 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція ФІАС для адресних підсказок на сайті

ФІАС (Федеральна інформаційна адресна система) — офіційний державний реєстр адрес Росії. Його дані розповсюджуються безплатно, оновлюються щотижня та використовуються як еталонна база для перевірки коректності адрес. Для реалізації адресних підсказок на сайті ФІАС рідко використовується напрямку: повна база важить кілька гігабайт і потребує окремої інфраструктури. На практиці працюють через DaData або подібні сервіси, які самі зберігають та індексують ФІАС-дані, надаючи зручний API.

Проте якщо стоїть завдання працювати з ФІАС без посередників — наприклад, у закритому контурі або для внутрішнього корпоративного порталу — потрібно будувати власну інфраструктуру.

Отримання та завантаження даних ФІАС

Актуальні дампи публікуються на сайті https://fias.nalog.ru/. Доступні два формати: повна база (XML, кілька десятків архівів) та дельта-оновлення (щотижневі). З 2022 року ФІАС планомірно замінюється ГАРС (ГАР), формат XML трохи змінився, але принципи ті ж.

Мінімальний набір таблиць для адресних підсказок:

  • AS_ADDR_OBJ — регіони, райони, міста, вулиці
  • AS_HOUSES — дома, будівлі, корпуси
  • AS_HIERARCHY — ієрархічні зв'язки об'єктів
  • AS_ADDR_OBJ_PARAMS — додаткові параметри (поштовий індекс тощо)

Завантаження XML-дампа в PostgreSQL через php-скрипт або python-парсер займає 3–6 годин на перший раз. Для наступних оновлень використовуються дельта-файли — завантаження займає 10–30 хвилин.

Структура таблиць та індекси

CREATE TABLE addr_obj (
    id         UUID PRIMARY KEY,
    object_id  BIGINT,
    name       TEXT NOT NULL,
    type_name  TEXT,
    level      SMALLINT,
    is_active  BOOLEAN DEFAULT true
);

CREATE TABLE houses (
    id         UUID PRIMARY KEY,
    object_id  BIGINT,
    addr_obj_id BIGINT,
    house_num  TEXT,
    build_num  TEXT,
    struct_num TEXT,
    is_active  BOOLEAN DEFAULT true
);

-- Індекс для повнотекстового пошуку
CREATE INDEX idx_addr_obj_name_fts
    ON addr_obj USING GIN (to_tsvector('russian', name));

-- Індекс для ієрархії
CREATE INDEX idx_hierarchy_parent ON hierarchy(parent_obj_id);
CREATE INDEX idx_hierarchy_child  ON hierarchy(object_id);

Без GIN-індекса пошук по 20+ млн записів буде нестерпимо повільним.

API для підсказок

Простий endpoint на PHP/Laravel, який приймає рядок та повертає список варіантів:

public function suggest(Request $request): JsonResponse
{
    $query = trim($request->input('q', ''));
    if (mb_strlen($query) < 2) {
        return response()->json([]);
    }

    $results = DB::select("
        SELECT
            ao.name,
            ao.type_name,
            ao.level,
            h.path_name
        FROM addr_obj ao
        JOIN addr_hierarchy h ON h.object_id = ao.object_id
        WHERE to_tsvector('russian', ao.name) @@ plainto_tsquery('russian', ?)
          AND ao.is_active = true
        ORDER BY ao.level, ao.name
        LIMIT 10
    ", [$query]);

    return response()->json($results);
}

Для введення домів запит трохи складніший — потрібно спочатку знайти вулицю за її object_id, потім шукати дома за addr_obj_id.

Фронтенд: підключення підсказок

На стороні браузера — стандартна логіка debounce + fetch:

let timer;
input.addEventListener('input', () => {
    clearTimeout(timer);
    timer = setTimeout(async () => {
        const q = input.value.trim();
        if (q.length < 2) return;
        const res = await fetch(`/api/fias/suggest?q=${encodeURIComponent(q)}`);
        const data = await res.json();
        renderDropdown(data);
    }, 250);
});

Затримка 250 мс виключає запит на кожний натиснутий символ.

Нюанси власної інфраструктури

Власна ФІАС-база виправдана, коли: немає можливості використовувати зовнішні сервіси (закрита мережа, вимоги ІБ), планується дуже високий обсяг запитів (десятки тисяч на день), потрібна повна кастомізація логіки пошуку.

Якщо таких обмежень немає — простіше й дешевше працювати через DaData. Стоимість власної інфраструктури: окремий сервер з 8+ ГБ RAM, ~50 ГБ дискового пространства, налаштування автообновлення дельт. Первинна завантаження та налаштування займає 1–2 робочих дні, без урахування отладки якості пошуку.