AI Document Archive Search Implementation

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Document Archive Search Implementation
Medium
~5 business days
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

Реализация AI-поиска по архиву документов (Document Search)

AI-поиск по документальному архиву позволяет находить документы по смыслу запроса — не только по ключевым словам в названии файла. «Договоры с условием автопролонгации, истекающие в 2025 году» — такой запрос решает AI-поиск, но не файловая система.

Индексирование архива

Каждый документ при попадании в архив проходит обработку:

  1. Извлечение текста: pdfminer (PDF), python-docx (DOCX), unstructured.io (все форматы)
  2. Структурирование: разбивка на чанки + сохранение метаданных (раздел, страница)
  3. Эмбеддинги: text-embedding-3-small (OpenAI) или cointegrated/rubert-tiny2 (on-premise)
  4. Индексирование в Qdrant/pgvector
  5. Извлечение структурированных метаданных: тип документа, стороны, даты, суммы → в реляционную БД

Гибридный поиск

Комбинация полнотекстового и семантического поиска:

def search_documents(query: str, filters: dict = None) -> list[SearchResult]:
    # Семантический поиск
    query_embedding = embedder.encode(query)
    semantic_results = qdrant.search(
        collection_name="documents",
        query_vector=query_embedding,
        query_filter=build_qdrant_filter(filters),
        limit=20
    )

    # BM25 поиск
    bm25_results = elasticsearch.search(
        index="documents",
        body={"query": {"match": {"content": query}}, "filter": build_es_filter(filters)},
        size=20
    )

    # RRF слияние и reranking
    merged = reciprocal_rank_fusion(semantic_results, bm25_results)
    reranked = cross_encoder.rerank(query, merged[:10])
    return reranked[:5]

Фасетный поиск

Дополнительные фильтры для точного поиска:

  • Тип документа: договор / акт / накладная
  • Контрагент: название или ИНН
  • Диапазон дат (подписания, окончания)
  • Диапазон сумм
  • Статус: действующий / расторгнут / истёк

Conversational search

«Найди договоры» → «с каким контрагентом?» → «Газпром» → «за какой период?» — диалоговый уточняющий поиск. LLM конвертирует диалог в структурированный запрос к хранилищу.

Метрики: NDCG@5, MRR, пользовательская оценка «нашли ли то что искали» (explicit feedback).