This commit is contained in:
parent
774240ca73
commit
f42d81b9fc
|
@ -1,13 +1,18 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
from opensearchpy import OpenSearch
|
from opensearchpy import OpenSearch
|
||||||
|
|
||||||
from services.encoders import CustomJSONEncoder
|
from services.encoders import CustomJSONEncoder
|
||||||
from services.logger import root_logger as logger
|
|
||||||
from services.rediscache import redis
|
from services.rediscache import redis
|
||||||
|
|
||||||
|
|
||||||
|
# Set redis logging level to suppress DEBUG messages
|
||||||
|
logger = logging.getLogger("search")
|
||||||
|
logger.setLevel(logging.WARNING)
|
||||||
|
|
||||||
ELASTIC_HOST = os.environ.get("ELASTIC_HOST", "").replace("https://", "")
|
ELASTIC_HOST = os.environ.get("ELASTIC_HOST", "").replace("https://", "")
|
||||||
ELASTIC_USER = os.environ.get("ELASTIC_USER", "")
|
ELASTIC_USER = os.environ.get("ELASTIC_USER", "")
|
||||||
ELASTIC_PASSWORD = os.environ.get("ELASTIC_PASSWORD", "")
|
ELASTIC_PASSWORD = os.environ.get("ELASTIC_PASSWORD", "")
|
||||||
|
@ -118,13 +123,13 @@ class SearchService:
|
||||||
|
|
||||||
def create_index(self):
|
def create_index(self):
|
||||||
if self.client:
|
if self.client:
|
||||||
logger.debug(f"Создается индекс: {self.index_name}")
|
logger.info(f"Создается индекс: {self.index_name}")
|
||||||
self.client.indices.create(index=self.index_name, body=index_settings)
|
self.client.indices.create(index=self.index_name, body=index_settings)
|
||||||
logger.debug(f"Индекс {self.index_name} создан")
|
logger.info(f"Индекс {self.index_name} создан")
|
||||||
|
|
||||||
async def check_index(self):
|
async def check_index(self):
|
||||||
if self.client:
|
if self.client:
|
||||||
logger.debug(f"Проверяем индекс {self.index_name}...")
|
logger.info(f"Проверяем индекс {self.index_name}...")
|
||||||
if not self.client.indices.exists(index=self.index_name):
|
if not self.client.indices.exists(index=self.index_name):
|
||||||
self.create_index()
|
self.create_index()
|
||||||
self.client.indices.put_mapping(index=self.index_name, body=expected_mapping)
|
self.client.indices.put_mapping(index=self.index_name, body=expected_mapping)
|
||||||
|
@ -136,9 +141,9 @@ class SearchService:
|
||||||
result = json.loads(result)
|
result = json.loads(result)
|
||||||
if isinstance(result, dict):
|
if isinstance(result, dict):
|
||||||
mapping = result.get(self.index_name, {}).get("mappings")
|
mapping = result.get(self.index_name, {}).get("mappings")
|
||||||
logger.debug(f"Найдена структура индексации: {mapping['properties'].keys()}")
|
logger.info(f"Найдена структура индексации: {mapping['properties'].keys()}")
|
||||||
if mapping and mapping["properties"].keys() != expected_mapping["properties"].keys():
|
if mapping and mapping["properties"].keys() != expected_mapping["properties"].keys():
|
||||||
logger.debug(f"Ожидаемая структура индексации: {expected_mapping}")
|
logger.info(f"Ожидаемая структура индексации: {expected_mapping}")
|
||||||
logger.warn("[!!!] Требуется переиндексация всех данных")
|
logger.warn("[!!!] Требуется переиндексация всех данных")
|
||||||
self.delete_index()
|
self.delete_index()
|
||||||
self.client = None
|
self.client = None
|
||||||
|
@ -147,7 +152,7 @@ class SearchService:
|
||||||
|
|
||||||
def index(self, shout):
|
def index(self, shout):
|
||||||
if self.client:
|
if self.client:
|
||||||
logger.debug(f"Индексируем пост {shout.id}")
|
logger.info(f"Индексируем пост {shout.id}")
|
||||||
index_body = {
|
index_body = {
|
||||||
"body": shout.body,
|
"body": shout.body,
|
||||||
"title": shout.title,
|
"title": shout.title,
|
||||||
|
@ -164,7 +169,7 @@ class SearchService:
|
||||||
self.client.index(index=self.index_name, id=str(shout.id), body=index_body)
|
self.client.index(index=self.index_name, id=str(shout.id), body=index_body)
|
||||||
|
|
||||||
async def search(self, text, limit, offset):
|
async def search(self, text, limit, offset):
|
||||||
logger.debug(f"Ищем: {text}")
|
logger.info(f"Ищем: {text}")
|
||||||
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