cache-success-only
All checks were successful
Deploy to core / deploy (push) Successful in 1m46s

This commit is contained in:
Untone 2024-01-29 09:45:00 +03:00
parent 2f2fa346ed
commit ae9e025959
2 changed files with 16 additions and 17 deletions

View File

@ -311,7 +311,7 @@ async def load_shouts_feed(_, info, options):
@query.field('load_shouts_search')
async def load_shouts_search(_, _info, text, limit=50, offset=0):
if text and len(text) > 2:
if isinstance(text, str) and len(text) > 2:
return await search_text(text, limit, offset)
return []

View File

@ -8,6 +8,8 @@ from opensearchpy import OpenSearch
from services.rediscache import redis
os_logger = logging.getLogger(name='opensearch')
os_logger.setLevel(logging.INFO)
logger = logging.getLogger('\t[services.search]\t')
logger.setLevel(logging.DEBUG)
@ -46,7 +48,7 @@ class SearchService:
logger.info(' Клиент OpenSearch.org подключен')
self.check_index()
except Exception as exc:
logger.error(exc)
logger.error(f' {exc}')
self.client = None
def info(self):
@ -104,7 +106,7 @@ class SearchService:
finally:
self.lock.release()
else:
logger.debug('..')
logger.debug(' ..')
except Exception as error:
logging.warning(f' {error}')
@ -154,22 +156,26 @@ class SearchService:
logger.debug(f' Индексируем пост {id_}')
self.client.index(index=self.index_name, id=id_, body=shout)
def search(self, query, limit, offset):
logger.debug(f' Ищем: {query}')
async def search(self, text, limit, offset):
logger.debug(f' Ищем: {text}')
search_body = {
'query': {'match': {'_all': query}},
'query': {'match': {'_all': text}},
}
if self.client:
search_response = self.client.search(index=self.index_name, body=search_body, size=limit, from_=offset)
hits = search_response['hits']['hits']
return [
results = [
{
**hit['_source'],
'score': hit['_score'],
}
for hit in hits
]
# Use Redis as cache with TTL
redis_key = f'search:{text}'
await redis.execute('SETEX', redis_key, REDIS_TTL, json.dumps(results))
return []
@ -178,14 +184,7 @@ search_service = SearchService()
async def search_text(text: str, limit: int = 50, offset: int = 0):
payload = []
try:
# Use a key with a prefix to differentiate search results from other Redis data
redis_key = f'search:{text}'
if not search_service.client:
if search_service.client:
# Use OpenSearchService.search_post method
payload = search_service.search(text, limit, offset)
# Use Redis as cache with TTL
await redis.execute('SETEX', redis_key, REDIS_TTL, json.dumps(payload))
except Exception as e:
logging.error(f' Ошибка поиска: {e}')
return payload