Сервіс пошуку реалізований у вигляді 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
При любом релизе происходит следующий порядок действий:
Выполняються k8s (pre-upgrade) джобы по созданию темплейтов для индексов. Поды джоб в своих названиях имеют search-create-index-action Для каждого типа обьекта, создаеться отдельный темплейт с матчингом по имени (action, lease, procedures, ...). Эластик использует эти шаблоны, для дальнейшего автоматического построения индексации, разделения процедур по различным индексам, выделение полей для полнотекстового поиска и ... Порядок выполнения действий в джобе следующий:
Проверить сушествование темплейта в ElasticSearch
- При наличии, проверить соответствия версии темплейта из релиза и тот который в ElasticSearch
- Если версии отличаються, удалить все индексы связаные с этим темплейтом
- Если версии одинаковые, нечего не делать
- При наличии, проверить соответствия версии темплейта из релиза и тот который в ElasticSearch
Обносить/Создать темплейт
!Этот набор действий должен всегда предшествовать любой операции по добавлению новых данных в эластик. Если не будет правильного шаблона, эластик не сможет правильно построить индексы и search-api не вернет не какого результата🚀️
- Запускаеться сервис k8s Search Api. Поды в своих названиях имеют *search-api
- Запускаються поды реалтайм синхронизации всех новых данных получаемых из Mirror Services. Поды в своих названиях имеют search-mirror-client-action Из ElasticSearch он получает последнию временную отметку засинхронизированных данных и запрашивает у Mirror Services данные с этого момента. Порядок выполнения действий в поде следующий:
- Получить временную метку последних засинхронезированых документов из ElasticSearch:
- При наличии временной метки, запросить у Mirror Services данные начиная с неё и отправить их в ElasticSearch
- При отсутствии временной метки:
- Запросить у Mirror Services все данные и отправить их в ElasticSearch
- Дождаться от мирор сервиса ответа об окончании синхронизации
- Завершить работу и перезапуститься средствами k8s с выполнением операций с начала текушей последовательности
- Получить временную метку последних засинхронезированых документов из ElasticSearch:
- Запускаються джобы по реиндексации данных из Mirror Services. Поды в своих названиях имеют search-reindex-data После запуска, через 300 секунд, получают весь набор данных из Mirror Services и отправляют его в ElasticSearch. Это сделано для того чтобы после каждого релиза и миграций, в ElasticSearch всегда были актуальные данные. Порядок выполнения действий в джобе следующий:
- Подождать 300 секунд
- Запросить у Mirror Services все данные и отправить их в ElasticSearch
- Дождаться от мирор сервиса ответа об окончании синхронизации
- Завершить работу