Назад к подготовке

Как превратить текстовый запрос в кандидатов для поиска недвижимости

Пользователь пишет свободный текстовый запрос по недвижимости, в котором могут быть частые атрибуты и редкие бытовые детали. Как превратить такой query в кандидатов через structured attributes, полнотекстовый поиск и векторный поиск?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Для частых и точных ограничений лучше извлекать атрибуты из query и искать по structured/full-text индексу. Для редких или мягких формулировок нужен vector search по описаниям/чанкам и, возможно, изображениям. Кандидатов из разных источников объединяем и передаем в ranker с признаками provenance.

Полный разбор

Не стоит сводить все к одному embedding search. Для частых и важных ограничений - город, район, цена, комнаты, тип аренды, наличие техники, метро - полезен query parser, который превращает текст в атрибуты. Эти атрибуты можно матчить со структурными полями объявлений и full-text индексом.

Для long-tail формулировок, где нет заранее заведенного признака, нужен dense/vector retrieval. Описание объявления можно разбивать на чанки и строить embeddings, чтобы запросы вроде "тихая квартира рядом с парком" доставали релевантные объявления даже без точного флага. Lexical search все равно нужен для адресов, метро, редких имен и точных совпадений.

Candidate generation лучше делать гибридно: structured filters, BM25/full-text, vector index, freshness/popularity fallback и допустимые paid listings. В ranker нужно передавать provenance: откуда пришел кандидат и по каким признакам он совпал. Это помогает debug, объяснениям и контролю paid/organic баланса.

Теория

Hybrid retrieval нужен потому, что structured matching, lexical search и embeddings ошибаются на разных типах запросов.

Типичные ошибки

  • Заменить все фильтры одним opaque embedding search.
  • Потерять точные geo/address/entity совпадения.
  • Не передать в ranker признаки источника кандидата.

Как отвечать на собеседовании

  • Скажите: query parser плюс full-text плюс dense retrieval.
  • Отдельно назовите long-tail атрибуты и candidate provenance.