This commit is contained in:
parent
9dde136c9c
commit
a71a6fcc41
|
@ -54,6 +54,9 @@ expected_mapping = index_settings["mappings"]
|
||||||
# Создание цикла событий
|
# Создание цикла событий
|
||||||
search_loop = asyncio.get_event_loop()
|
search_loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
|
# В начале файла добавим флаг
|
||||||
|
SEARCH_ENABLED = bool(os.environ.get("ELASTIC_HOST", ""))
|
||||||
|
|
||||||
|
|
||||||
def get_indices_stats():
|
def get_indices_stats():
|
||||||
indices_stats = search_service.client.cat.indices(format="json")
|
indices_stats = search_service.client.cat.indices(format="json")
|
||||||
|
@ -87,8 +90,8 @@ class SearchService:
|
||||||
self.client = None
|
self.client = None
|
||||||
self.lock = asyncio.Lock()
|
self.lock = asyncio.Lock()
|
||||||
|
|
||||||
# Инициализация клиента OpenSearch
|
# Инициализация клиента OpenSearch только если поиск включен
|
||||||
if ELASTIC_HOST:
|
if SEARCH_ENABLED:
|
||||||
try:
|
try:
|
||||||
self.client = OpenSearch(
|
self.client = OpenSearch(
|
||||||
hosts=[{"host": ELASTIC_HOST, "port": ELASTIC_PORT}],
|
hosts=[{"host": ELASTIC_HOST, "port": ELASTIC_PORT}],
|
||||||
|
@ -98,25 +101,24 @@ class SearchService:
|
||||||
verify_certs=False,
|
verify_certs=False,
|
||||||
ssl_assert_hostname=False,
|
ssl_assert_hostname=False,
|
||||||
ssl_show_warn=False,
|
ssl_show_warn=False,
|
||||||
# ca_certs = ca_certs_path
|
|
||||||
)
|
)
|
||||||
logger.info("Клиент OpenSearch.org подключен")
|
logger.info("Клиент OpenSearch.org подключен")
|
||||||
|
|
||||||
# Создание задачи и запуск в цикле событий
|
|
||||||
search_loop.create_task(self.check_index())
|
search_loop.create_task(self.check_index())
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.error(f"Ошибка подключения к OpenSearch: {exc}")
|
logger.warning(f"Поиск отключен из-за ошибки подключения: {exc}")
|
||||||
self.client = None
|
self.client = None
|
||||||
else:
|
else:
|
||||||
logger.warning("env var ELASTIC_HOST is not set")
|
logger.info("Поиск отключен (ELASTIC_HOST не установлен)")
|
||||||
|
|
||||||
async def info(self):
|
async def info(self):
|
||||||
|
if not SEARCH_ENABLED:
|
||||||
|
return {"status": "disabled"}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return get_indices_stats()
|
return get_indices_stats()
|
||||||
except ConnectionError as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to connect to OpenSearch: {e}")
|
logger.error(f"Failed to get search info: {e}")
|
||||||
# Возможно стоит добавить fallback поведение
|
return {"status": "error", "message": str(e)}
|
||||||
return
|
|
||||||
|
|
||||||
def delete_index(self):
|
def delete_index(self):
|
||||||
if self.client:
|
if self.client:
|
||||||
|
@ -154,6 +156,9 @@ class SearchService:
|
||||||
logger.error("клиент не инициализован, невозможно проверить индекс")
|
logger.error("клиент не инициализован, невозможно проверить индекс")
|
||||||
|
|
||||||
def index(self, shout):
|
def index(self, shout):
|
||||||
|
if not SEARCH_ENABLED:
|
||||||
|
return
|
||||||
|
|
||||||
if self.client:
|
if self.client:
|
||||||
logger.info(f"Индексируем пост {shout.id}")
|
logger.info(f"Индексируем пост {shout.id}")
|
||||||
index_body = {
|
index_body = {
|
||||||
|
@ -164,8 +169,6 @@ class SearchService:
|
||||||
"media": shout.media,
|
"media": shout.media,
|
||||||
}
|
}
|
||||||
asyncio.create_task(self.perform_index(shout, index_body))
|
asyncio.create_task(self.perform_index(shout, index_body))
|
||||||
else:
|
|
||||||
logger.error("клиент не инициализован, невозможно проидексировать")
|
|
||||||
|
|
||||||
async def perform_index(self, shout, index_body):
|
async def perform_index(self, shout, index_body):
|
||||||
if self.client:
|
if self.client:
|
||||||
|
@ -179,6 +182,9 @@ class SearchService:
|
||||||
logger.error(f"Indexing error for shout {shout.id}: {e}")
|
logger.error(f"Indexing error for shout {shout.id}: {e}")
|
||||||
|
|
||||||
async def search(self, text, limit, offset):
|
async def search(self, text, limit, offset):
|
||||||
|
if not SEARCH_ENABLED:
|
||||||
|
return []
|
||||||
|
|
||||||
logger.info(f"Ищем: {text} {offset}+{limit}")
|
logger.info(f"Ищем: {text} {offset}+{limit}")
|
||||||
search_body = {
|
search_body = {
|
||||||
"query": {"multi_match": {"query": text, "fields": ["title", "lead", "subtitle", "body", "media"]}}
|
"query": {"multi_match": {"query": text, "fields": ["title", "lead", "subtitle", "body", "media"]}}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user