feat(search): add legal force filter and topic taxonomy draft #31
Reference in New Issue
Block a user
Delete Branch "feature/search-catalog-v1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Реализован фильтр Search API v1 по юридической силе с группировкой типов НПА и подготовлен отдельный черновик полной тематической иерархии
GeneralClassifiers. Тематический фильтр в API v1 не добавлялся по решению продукта.Черновик содержит 2 065 исходных узлов; 328 корневых рубрик отложены для ручной проверки (77 неоднозначны, для 251 правило не найдено), у 1 524 узлов отсутствует KY-подпись в источнике. До ручного утверждения темы не являются публичными кодами API. Пересборка завершается ошибкой при отсутствующих, повреждённых или структурно неполных данных источника.
Проверки:
PYTHONPATH=backend python3 -m unittest discover -s backend -v— 26 пройдены, один OpenSearch integration test пропущен (итого 27), так какAKYLDASH_OPENSEARCH_URLне задан; структура JSON-каталога проверена.Независимый review: есть блокирующие замечания.
tools/build_search_topic_taxonomy.py:57–60иdocs/product/search-catalog-v1.md:108–110:group_forвыбирает первый regex match, не проверяя остальные. В JSON 77 корневых рубрик совпадают с несколькими правилами; например «Иностранные инвестиции» совпадает сinternationalиeconomy, но автоматически попадает в первую группу. Поэтому утверждение, что неоднозначные рубрики направляются вreview_required, неверно. Нужно явно отправлять multi-match на ручную проверку либо обосновать и проверить приоритеты, затем обновить экспорт и счётчики.tools/build_search_topic_taxonomy.py:120–126: отсутствующий, нечитаемый или невалидныйdocument.jsonпревращается в пустой список, аprocessedвсё равно увеличивается. Пересборка может молча выпустить неполную таксономию с завышенным числом обработанных документов. Ошибка должна останавливать экспорт либо явно фиксироваться и отражаться в счётчиках.Проверки прошли: backend suite — 23 теста, 1 OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL; повторный экспорт совпал с закоммиченным JSON по содержимому. Остальные проверенные изменения API/legal-force и версионирование/changelog блокирующих замечаний не вызвали.Повторный независимый review: оба предыдущих замечания исправлены — неоднозначные regex-совпадения теперь попадают в
review_required, а отсутствующий/битый JSON successful-записи останавливает сборку.Остался блокирующий случай полноты:
tools/build_search_topic_taxonomy.py:128принимает объект безgeneral_classifiers(например{}) как пустую иерархию; неверный тип поля также молча игнорируется вadd_nodes. Я проверил: такая successful-запись даёт успешный результатdocuments=1, nodes=0. Нормализатор всегда записываетgeneral_classifiersкак список, поэтому при отсутствии поля или неверном типе сборка должна завершаться ошибкой; добавьте проверку и тест.Проверки: backend suite — 25 тестов пройдены, один OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL; полный экспорт повторён и семантически совпадает с JSON в PR (209958 документов, 2065 узлов, 687 корней, 328 на ручной проверке). API/legal-force, версия и changelog при повторной проверке без новых блокирующих замечаний.Повторный независимый review текущего PR
f8f98df: прежние замечания устранены. Все три проверки подтверждены: неоднозначные правила ведут вreview_required; missing/corrupt/non-object normalized JSON и отсутствующий/не-listgeneral_classifiersзавершают build ошибкой; неверный тип вложенногоGeneralClassifiersи не-object узлы также отклоняются.Noneдля дочерней ветви остаётся допустимым листом, что соответствует нормализатору.Полный backend suite: 27 тестов пройдены, один OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL;git diff --checkчистый. Повторно просмотрел остальной diff: API/legal-force, индексация, версия и changelog без блокирующих замечаний. Review завершён без блокирующих замечаний.Финальный независимый review текущего PR
000cf46: без блокирующих замечаний. Все три прежних findings по классификации и полноте экспорта остаются решёнными: неоднозначные совпадения идут вreview_required; missing/corrupt/non-object JSON, отсутствующий или неверного типаgeneral_classifiers, а также повреждённые вложенные ветви/узлы останавливают сборку. Точечные проверки этих сценариев прошли.Changelog уточнён под итоговый scope: описывает фильтр юридической силы и экспорт полной иерархии как черновика, отдельно фиксируя, что тематическая навигация отложена до ручного утверждения. Backend suite: 27 passed, 1 OpenSearch integration test skipped без
AKYLDASH_OPENSEARCH_URL;git diff --checkчистый. Review завершён без блокирующих замечаний.