64 lines
2.0 KiB
Python
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()
|