Редактировать postgres_service.py
This commit is contained in:
@@ -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 []
|
||||
|
||||
Reference in New Issue
Block a user