Редактировать postgres_service.py

This commit is contained in:
Markov Andrey
2026-06-30 22:43:12 +00:00
parent dbc807f2e9
commit fef231e992

View File

@@ -1,10 +1,11 @@
# -*- coding: utf-8 -*-
# rag/services/postgres_service.py
"""
Сервис для работы с PostgreSQL (через asyncpg).
Обеспечивает пул соединений, CRUD операции для документов, истории диалогов, комнат MUC,
управление доступом к личным документам.
Добавлена поддержка флага indexed для транзакционности индексации.
Добавлены составные индексы для ускорения полнотекстового поиска (fallback).
ВНИМАНИЕ: Создание таблиц теперь выполняется через Alembic, а не в коде.
"""
@@ -109,10 +110,15 @@ class PostgresService:
indexed BOOLEAN DEFAULT FALSE
)
""")
# Индексы
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_owner ON documents(owner_jid)")
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_global ON documents(is_global)")
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_room ON documents(room_jid)")
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_indexed ON documents(indexed)")
# Составные индексы для ускорения полнотекстового поиска (fallback)
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_room_source ON documents(room_jid, source_name)")
await conn.execute("CREATE INDEX IF NOT EXISTS idx_documents_owner_source ON documents(owner_jid, source_name)")
# Полнотекстовый индекс (GIN) используем 'russian', при необходимости заменить на 'simple'
await conn.execute("""
CREATE INDEX IF NOT EXISTS ft_source_name
ON documents USING GIN (to_tsvector('russian', source_name))
@@ -312,6 +318,7 @@ class PostgresService:
"""
Поиск по source_name с использованием полнотекстового индекса PostgreSQL.
Возвращает список документов (id, source_name, metadata) только с indexed = TRUE.
Для ускорения используются составные индексы (room_jid, source_name) и (owner_jid, source_name).
"""
if not query or len(query.strip()) < 3:
return []