From 91a2854537edf46a61f3ee6c5c686474c3606c3e Mon Sep 17 00:00:00 2001 From: Untone Date: Sat, 18 May 2024 11:52:17 +0300 Subject: [PATCH] no-remove-index-fix --- services/search.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/services/search.py b/services/search.py index df14b88c..fee58d31 100644 --- a/services/search.py +++ b/services/search.py @@ -50,6 +50,30 @@ expected_mapping = index_settings["mappings"] # Создание цикла событий search_loop = asyncio.get_event_loop() +def get_indices_stats(): + indices_stats = search_service.client.cat.indices(format="json") + for index_info in indices_stats: + index_name = index_info["index"] + if not index_name.startswith('.'): + index_health = index_info["health"] + index_status = index_info["status"] + pri_shards = index_info["pri"] + rep_shards = index_info["rep"] + docs_count = index_info["docs.count"] + docs_deleted = index_info["docs.deleted"] + store_size = index_info["store.size"] + pri_store_size = index_info["pri.store.size"] + + logger.info(f"Index: {index_name}") + logger.info(f"Health: {index_health}") + logger.info(f"Status: {index_status}") + logger.info(f"Primary Shards: {pri_shards}") + logger.info(f"Replica Shards: {rep_shards}") + logger.info(f"Documents Count: {docs_count}") + logger.info(f"Deleted Documents: {docs_deleted}") + logger.info(f"Store Size: {store_size}") + logger.info(f"Primary Store Size: {pri_store_size}") + class SearchService: def __init__(self, index_name="search_index"): @@ -84,8 +108,7 @@ class SearchService: async def info(self): if isinstance(self.client, OpenSearch): logger.info("Поиск подключен") - indices_stats = await self.client.cat.indices(format="json") - logger.info(indices_stats) + get_indices_stats() else: logger.warning("Задайте переменные среды для подключения к серверу поиска") @@ -119,7 +142,7 @@ class SearchService: mapping = result.get(self.index_name, {}).get("mappings") if mapping and mapping != expected_mapping: logger.debug(f"Найдена структура индексации: {mapping}") - logger.warn("[!!!] Требуется другая структура индексации и переиндексация данных") + logger.warn("[!!!] Требуется другая структура индексации и переиндексация всех данных") self.client = None else: logger.error("клиент не инициализован, невозможно проверить индекс") @@ -127,8 +150,7 @@ class SearchService: def index(self, shout): if self.client: - id_ = str(shout.id) - logger.debug(f"Индексируем пост {id_}") + logger.debug(f"Индексируем пост {shout.id}") asyncio.create_task(self.perform_index(shout)) else: logger.error("клиент не инициализован, невозможно проидексировать") @@ -136,7 +158,9 @@ class SearchService: async def perform_index(self, shout): if self.client: self.client.index( - index=self.index_name, id=str(shout.id), body=shout.dict() + index=self.index_name, + id=str(shout.id), + body=shout.dict() ) async def search(self, text, limit, offset):