You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

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