File size: 1,682 Bytes
454f118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
scripts/build_bm25.py
======================
Standalone script to verify Qdrant is healthy and build the BM25 index.
Run this after ingestion is complete.
"""
import sys, os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from config.settings import settings

from src.utils.logger import logger
from src.vectorstore.qdrant_store import QdrantStore
from src.vectorstore.bm25_index import BM25Index

# --- Step 1: Verify Qdrant ---
print("Checking Qdrant collection...")
qdrant = QdrantStore()
info = qdrant.get_collection_info()
print(f"Qdrant status  : {info['status']}")
print(f"Vectors stored : {info.get('vectors_count', info.get('points_count', '?'))}")

# --- Step 2: Scroll all index chunks from Qdrant to build BM25 ---
print("\nScrolling all index chunks from Qdrant for BM25 build...")

from qdrant_client.models import Filter, FieldCondition, MatchAny

# We need Chunk-like objects. Let's just rebuild from the JSON cache.
from src.ingestion.pipeline import IngestionPipeline
from src.chunking.hierarchical_chunker import HierarchicalChunker

pipeline = IngestionPipeline()
documents = pipeline.run_all(force_reprocess=False)   # loads from cache instantly

chunker = HierarchicalChunker()
chunked_docs = chunker.chunk_documents(documents)

all_index_chunks = []
for cdoc in chunked_docs:
    all_index_chunks.extend(cdoc.all_index_chunks)

print(f"Index chunks for BM25: {len(all_index_chunks)}")

# --- Step 3: Build BM25 ---
print("\nBuilding BM25 sparse index...")
bm25 = BM25Index()
bm25.build(all_index_chunks)

print(f"\nBM25 index built over {len(all_index_chunks)} chunks")
print("\nAll done! Run: streamlit run app/main.py")