diff --git a/services/search.py b/services/search.py index 9acd274c..fb032bb3 100644 --- a/services/search.py +++ b/services/search.py @@ -1,6 +1,5 @@ import json import os -from multiprocessing import Manager import threading from opensearchpy import OpenSearch @@ -39,7 +38,8 @@ index_settings = { 'properties': { 'body': {'type': 'text', 'analyzer': 'ru'}, 'title': {'type': 'text', 'analyzer': 'ru'}, - # 'author': {'type': 'text'}, + 'lead': {'type': 'text', 'analyzer': 'ru'}, + 'subtitle': {'type': 'text', 'analyzer': 'ru'}, } }, } @@ -50,12 +50,10 @@ expected_mapping = index_settings['mappings'] class SearchService: def __init__(self, index_name='search_index'): self.index_name = index_name - self.manager = Manager() self.client = None # Используем менеджер для создания Lock и Value self.lock = threading.Lock() - self.initialized_flag = self.manager.Value('i', 0) # Only initialize the instance if it's not already initialized if not self.initialized_flag.value and ELASTIC_HOST: @@ -129,13 +127,18 @@ class SearchService: def recreate_index(self): if self.lock.acquire(blocking=False): try: - self.delete_index() - self.check_index() + thread = threading.Thread(target=self._recreate_index) + thread.start() + thread.join() finally: self.lock.release() else: logger.debug(' cant reindex at the moment') + def _recreate_index(self): + self.delete_index() + self.check_index() + def index(self, shout): if self.client: id_ = str(shout.id)