#!/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()