Сервіс пошуку реалізований у вигляді 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
Запити не вимагать авторизації
Доступні фільтри:
bySellingMethod
Дозволяє шукати обʼєкти процедур по "Напрямку роботи".
Доступні Напрямки роботи ТУТ (шукай колонку Назва процедури в ЦБД (sellingMethod))
Приклад запиту:
| Code Block |
|---|
curl --location ' |
...
https://procedure |
...
.prozorro.sale/api/ |
...
Software requirements
- python3.9
- Elasticsearch
- aiohttp
System requirements
- Make
- Docker
- docker-compose
Usage
Building an image
| Code Block | ||
|---|---|---|
| ||
make docker-build |
Run
| Code Block | ||
|---|---|---|
| ||
make run |
Remove running services
| Code Block | ||
|---|---|---|
| ||
make remove-compose |
Running integration tests
| Code Block | ||
|---|---|---|
| ||
make test-integration |
Build sphinx docs based on the docstring description.
| Code Block | ||
|---|---|---|
| ||
make build-docs |
Build sphinx docs based on the docstring description.
| Code Block | ||
|---|---|---|
| ||
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
...
| Code Block | ||
|---|---|---|
| ||
python3 -m prozorro_sale.create_indexes -u localhost -i procedures |
...
- main index for procedures (name: procedures-<VERSION>, alias: procedures)
- timestamp index for sync (name: procedures_ts)
CLI script for ops
For usage
| Code Block | ||
|---|---|---|
| ||
➜ 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
| Code Block | ||
|---|---|---|
| ||
➜ 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:
...
search/procedures' \
--header 'Content-Type: application/json' \
--data '{
"page": 1,
"limit": 100,
"filters": [
{
"field": "sellingMethod",
"operator": "in",
"value": [
"commercialPropertyLease-english",
"commercialPropertyLease-dutch"
]
}
]
}' |
byDateModified
Дозволяє шукати обʼєкти процедур по даті останньої зміни обʼєкта ЦБД
Приклад запиту:
| Code Block |
|---|
curl --location 'https://procedure.prozorro.sale/api/search/procedures' \
--header 'Content-Type: application/json' \
--data '{
"page": 1,
"limit": 100,
"filters": [
{
"field": "dateModified",
"operator": "gt",
"value": "2025-05-14T00:00:47.00Z"
}
],
"sort": [
{
"field": "datePublished",
"direction": "desc"
}
]
}' |
...