cotienbot / src /search.py
Anothervin1's picture
Create src/search.py
a090dae verified
# File: src/search.py
import faiss
import numpy as np
import pickle
import os
from config.settings import Settings
from src.logger import logger
class Search:
def __init__(self):
self.index = faiss.IndexFlatL2(384)
self.texts = []
if os.path.exists(Settings.FAISS_INDEX_PATH):
self.index = faiss.read_index(Settings.FAISS_INDEX_PATH)
if os.path.exists(Settings.TEXTS_PATH):
with open(Settings.TEXTS_PATH, "rb") as f:
self.texts = pickle.load(f)
logger.info("Đã tải FAISS index và texts")
def add(self, text, vector):
self.index.add(np.array([vector], dtype=np.float32))
self.texts.append(text)
faiss.write_index(self.index, Settings.FAISS_INDEX_PATH)
with open(Settings.TEXTS_PATH, "wb") as f:
pickle.dump(self.texts, f)
logger.info(f"Đã thêm vào FAISS: {text[:50]}...")
def search(self, vector, k=1):
distances, indices = self.index.search(np.array([vector], dtype=np.float32), k)
return [(self.texts[i], distances[0][j]) for j, i in enumerate(indices[0]) if i != -1]