Files
wiki/tasks/snowbike-rag/scripts/index_incremental_meili.py
2026-04-12 21:55:33 +03:00

64 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""
Минимальный инкрементальный индексер для Meilisearch — добавляет только сообщения из указанного файла.
"""
import json
import time
import os
from pathlib import Path
# Убираем proxy для локальных запросов ДО импорта meilisearch
for k in list(os.environ):
if "proxy" in k.lower():
del os.environ[k]
import meilisearch
MEILI_URL = "http://127.0.0.1:7700"
INDEX_NAME = "snowbike_messages"
INCREMENTAL_FILE = Path(__file__).parent.parent / "data" / "incremental_20260407.jsonl"
BATCH_SIZE = 1000
def main():
print("=== Инкрементальная индексация Meilisearch ===")
client = meilisearch.Client(MEILI_URL)
health = client.health()
print(f"Meilisearch: {health}")
index = client.get_index(INDEX_NAME)
stats = index.get_stats()
print(f"Текущих документов: {stats.number_of_documents}")
# Load incremental messages
messages = []
with open(INCREMENTAL_FILE, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if line:
messages.append(json.loads(line))
print(f"Загружено из incremental: {len(messages)} сообщений")
# Add documents
task = index.add_documents(messages)
print(f"Task UID: {task.task_uid}")
# Wait for completion
start = time.time()
while time.time() - start < 120:
t = client.get_task(task.task_uid)
if t.status in ("succeeded", "failed", "canceled"):
print(f"Статус: {t.status}")
if t.status == "failed":
print(f"Ошибка: {t.error}")
break
time.sleep(1)
final_stats = index.get_stats()
print(f"Документов после индексации: {final_stats.number_of_documents}")
print("Готово!")
if __name__ == "__main__":
main()