[tradein] Адреса убивают same-building anchor: cian-новостройка без номера дома, avito «29р-н» слип, дубль-листинги #1773

Closed
opened 2026-06-19 08:26:03 +00:00 by bot-backend · 2 comments
Collaborator

Корень (качество адресов ломает матчинг дома):

  1. Cian-новостройки теряют номер дома_format_address (cian.py:957) собирает из geo.address[] (раион/мкр/улица), но для ЖК в parts НЕТ части house → адрес «…улица Евгения Савкова» без «29». Нужно тянуть номер из geo.jk/building/отдельного поля payload и не ронять в catch-all дом 7019.
  2. Avito номер слип с районом — «ул. Евгения Савкова, 29р-н Академический»: номер дома «29» приклеен к «р-н …» без разделителя → извлечение «29» ломается (отдельно от уже-закрытого #1365).
  3. Дубль-листинги — cian 330047129 вставлен дважды (одна копия с house_id_fk, другая NULL) → нужен UPSERT/дедуп по (source, source_id).

NB: cian-парсер — активная зона Лехи (cian sweeps), координировать. Avito-де-слип номера (#2) — изолированный фикс в normalize/cleaner.


Доказательная база (live prod, cad-кейс ЖК Суходольский квартал, ул. Евгения Савкова 29, ЕКБ; cian 330047129):

  • Один физический дом размазан на несколько houses: 6679=«…Евгения Савкова, 29А» (кадастр 66:41:0313010:11396, сюда матчится cian 330047129), 11110=«ул. Евгения Савкова,29» (12 listings, avito), 7019=«улица Евгения Савкова» (без номера, 42 listings, catch-all). «29»/«29А» не объединены.
  • listings по «Савкова»: avito 330 (41 unmatched), cian 97 (35 unmatched), yandex 48 (4 unmatched).
  • cian 330047129 задвоен: одна копия → house 6679, другая → house_id_fk=NULL.
  • estimator.py:1441 сам фиксирует проблему: «один дом дробится на несколько fk (Хохрякова 48 = 7085/9878/12797)».
**Корень (качество адресов ломает матчинг дома):** 1. **Cian-новостройки теряют номер дома** — `_format_address` (cian.py:957) собирает из `geo.address[]` (раион/мкр/улица), но для ЖК в parts НЕТ части `house` → адрес «…улица Евгения Савкова» без «29». Нужно тянуть номер из `geo.jk`/building/отдельного поля payload и не ронять в catch-all дом `7019`. 2. **Avito номер слип с районом** — «ул. Евгения Савкова, **29р-н Академический**»: номер дома «29» приклеен к «р-н …» без разделителя → извлечение «29» ломается (отдельно от уже-закрытого #1365). 3. **Дубль-листинги** — cian 330047129 вставлен дважды (одна копия с house_id_fk, другая NULL) → нужен UPSERT/дедуп по (source, source_id). **NB:** cian-парсер — активная зона Лехи (cian sweeps), координировать. Avito-де-слип номера (#2) — изолированный фикс в normalize/cleaner. --- **Доказательная база (live prod, cad-кейс ЖК Суходольский квартал, ул. Евгения Савкова 29, ЕКБ; cian 330047129):** - Один физический дом размазан на несколько `houses`: `6679`=«…Евгения Савкова, **29А**» (кадастр 66:41:0313010:11396, сюда матчится cian 330047129), `11110`=«ул. Евгения Савкова,**29**» (12 listings, avito), `7019`=«улица Евгения Савкова» (**без номера**, 42 listings, catch-all). «29»/«29А» не объединены. - listings по «Савкова»: avito 330 (41 unmatched), cian 97 (35 unmatched), yandex 48 (4 unmatched). - cian 330047129 **задвоен**: одна копия → house 6679, другая → `house_id_fk=NULL`. - `estimator.py:1441` сам фиксирует проблему: «один дом дробится на несколько fk (Хохрякова 48 = 7085/9878/12797)».
bot-backend added the
bug
tradein
scope/backend
labels 2026-06-19 08:26:03 +00:00
Author
Collaborator

Avito-часть исправлена в PR #1775 (де-слип «29р-н»→«29, р-н» в _clean_address + backfill 124 + тесты; normalize/fingerprint не тронут). Issue оставляю открытым — остаются cian-новостройки без номера дома (_format_address, зона cian) и дедуп дублей-листингов.

Avito-часть исправлена в PR #1775 (де-слип «29р-н»→«29, р-н» в `_clean_address` + backfill 124 + тесты; normalize/fingerprint не тронут). **Issue оставляю открытым** — остаются cian-новостройки без номера дома (`_format_address`, зона cian) и дедуп дублей-листингов.
Author
Collaborator

Закрыто (основное) — PR #1912 (deep-reviewed data-loss-safe):

  • PART 1 — cian new-build house recovery: при geo.address[] без номера дома → анкер по building_cadastral_number (cian_building_cad → Tier-0 cadastr_exact), корпуса 6679/11110/7019 схлопываются; + восстановление номера из building/ЖК-имени без фабрикации.
  • PART 2 — listings dedup: partial UNIQUE (source, source_id) (миграция 133), дубль cian 330047129 дедуплицирован (keeper по house_id_fk/is_active/last_seen, дети collision-safe).

Остаток: avito «29р-н» слип (мелкая нормализация адреса avito-листингов) — отдельным тикетом при рецидиве. Основная поломка same-building anchor устранена.

✅ Закрыто (основное) — PR #1912 (deep-reviewed data-loss-safe): - **PART 1** — cian new-build house recovery: при `geo.address[]` без номера дома → анкер по `building_cadastral_number` (`cian_building_cad` → Tier-0 cadastr_exact), корпуса 6679/11110/7019 схлопываются; + восстановление номера из building/ЖК-имени без фабрикации. - **PART 2** — listings dedup: partial UNIQUE `(source, source_id)` (миграция 133), дубль cian 330047129 дедуплицирован (keeper по house_id_fk/is_active/last_seen, дети collision-safe). Остаток: avito «29р-н» слип (мелкая нормализация адреса avito-листингов) — отдельным тикетом при рецидиве. Основная поломка same-building anchor устранена.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1773
No description provided.