Сервіс пошуку реалізований у вигляді API та надає функціональність для обробки пошукових запитів. Він підтримує параметри фільтрації, сортування та пагінації для ефективного отримання результатів.

Postman колекція ТУТ

Search Procedure API Service

Service to search by procedures/registry public data

Description

Service sync procedures/registry/auctions data and provide search with elasticsearch.
Search provided on top of the public data only, as it synchronized from the public data source.
For the full-text search, there is `full_text_search` field. It`s a service field, not shown by public api.

Swagger documentation

Search endpoints listed - https://procedure-dev.prozorro.sale/api/doc/search, search fold.

Software requirements

  • python3.9
  • Elasticsearch
  • aiohttp

System requirements

  • Make
  • Docker
  • docker-compose

Usage

Building an image

make docker-build

Run


make run

Remove running services

make remove-compose

Running integration tests

make test-integration

Build sphinx docs based on the docstring description.

make build-docs

Build sphinx docs based on the docstring description.

make clean-docs

Elastic indexes description

There are multiple indexes built on service with standard naming patterns:

  • Procedures (k8s_namespace)_procedures_(procedure_type).
    • Example: ``prozorro_dev_procedures_basicsell``
  • Registry:
    • (k8s_namespace)_registry
    • (k8s_namespace)_action
    • (k8s_namespace)_lease

Create indexes for elastic

python3 -m prozorro_sale.create_indexes -u localhost -i procedures


This will create 2 indexes:

  • main index for procedures (name: procedures-<VERSION>, alias: procedures)
  • timestamp index for sync (name: procedures_ts)

CLI script for ops

For usage

 ➜ manage --help

Usage: manage [OPTIONS] COMMAND [ARGS]...

  This is the Search interactive shell and a set of devops scripts for
  maintenance.

Options:
  --help  Show this message and exit.

Commands:
  debug    Shows the parsed manage file -V shows version
  indexes  Manages elastic indexes
  init     Initialize a manage shell in current directory $ manage init...
  shell    Runs a Python shell with context

For work with Procedure documents

 ➜ manage indexes

Usage: manage indexes [OPTIONS] COMMAND [ARGS]...

  With this command you can manage elastic indexes

Options:
  --help  Show this message and exit.

Commands:
  delete-index  Delete elastic index
  list-index    Listing elastic indexes


Indexing WorkFlow

Search Indexing WorkFlow

Сервис Search працює на базі ElasticSearch та забезпечує:

  • CBD API для роботи з ElasticSearch
  • Генерацію темплейтів для побудови індексів
  • Отримання інформації із Mirror Services CBD та надсилання інформації в ElasticSearch
  • Реіндексацію даних.

Indexing WorkFlow

При любом релизе происходит следующий порядок действий:


  1. Выполняються k8s (pre-upgrade) джобы по созданию темплейтов для индексов. Поды джоб в своих названиях имеют search-create-index-action Для каждого типа обьекта, создаеться отдельный темплейт с матчингом по имени (action, lease, procedures, ...). Эластик использует эти шаблоны, для дальнейшего автоматического построения индексации, разделения процедур по различным индексам, выделение полей для полнотекстового поиска и ... Порядок выполнения действий в джобе следующий:

    1. Проверить сушествование темплейта в ElasticSearch

      • При наличии, проверить соответствия версии темплейта из релиза и тот который в ElasticSearch
        • Если версии отличаються, удалить все индексы связаные с этим темплейтом
        • Если версии одинаковые, нечего не делать
    2. Обносить/Создать темплейт

    !Этот набор действий должен всегда предшествовать любой операции по добавлению новых данных в эластик. Если не будет правильного шаблона, эластик не сможет правильно построить индексы и search-api не вернет не какого результата🚀️


  1. Запускаеться сервис k8s Search Api. Поды в своих названиях имеют *search-api

  1. Запускаються поды реалтайм синхронизации всех новых данных получаемых из Mirror Services. Поды в своих названиях имеют search-mirror-client-action Из ElasticSearch он получает последнию временную отметку засинхронизированных данных и запрашивает у Mirror Services данные с этого момента. Порядок выполнения действий в поде следующий:
    • Получить временную метку последних засинхронезированых документов из ElasticSearch:
      • При наличии временной метки, запросить у Mirror Services данные начиная с неё и отправить их в ElasticSearch
      • При отсутствии временной метки:
        • Запросить у Mirror Services все данные и отправить их в ElasticSearch
        • Дождаться от мирор сервиса ответа об окончании синхронизации
        • Завершить работу и перезапуститься средствами k8s с выполнением операций с начала текушей последовательности

  1. Запускаються джобы по реиндексации данных из Mirror Services. Поды в своих названиях имеют search-reindex-data После запуска, через 300 секунд, получают весь набор данных из Mirror Services и отправляют его в ElasticSearch. Это сделано для того чтобы после каждого релиза и миграций, в ElasticSearch всегда были актуальные данные. Порядок выполнения действий в джобе следующий:
    • Подождать 300 секунд
    • Запросить у Mirror Services все данные и отправить их в ElasticSearch
    • Дождаться от мирор сервиса ответа об окончании синхронизации
    • Завершить работу
  • No labels