Anothervin1 commited on
Commit
a090dae
·
verified ·
1 Parent(s): 12151a0

Create src/search.py

Browse files
Files changed (1) hide show
  1. src/search.py +30 -0
src/search.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # File: src/search.py
2
+ import faiss
3
+ import numpy as np
4
+ import pickle
5
+ import os
6
+ from config.settings import Settings
7
+ from src.logger import logger
8
+
9
+ class Search:
10
+ def __init__(self):
11
+ self.index = faiss.IndexFlatL2(384)
12
+ self.texts = []
13
+ if os.path.exists(Settings.FAISS_INDEX_PATH):
14
+ self.index = faiss.read_index(Settings.FAISS_INDEX_PATH)
15
+ if os.path.exists(Settings.TEXTS_PATH):
16
+ with open(Settings.TEXTS_PATH, "rb") as f:
17
+ self.texts = pickle.load(f)
18
+ logger.info("Đã tải FAISS index và texts")
19
+
20
+ def add(self, text, vector):
21
+ self.index.add(np.array([vector], dtype=np.float32))
22
+ self.texts.append(text)
23
+ faiss.write_index(self.index, Settings.FAISS_INDEX_PATH)
24
+ with open(Settings.TEXTS_PATH, "wb") as f:
25
+ pickle.dump(self.texts, f)
26
+ logger.info(f"Đã thêm vào FAISS: {text[:50]}...")
27
+
28
+ def search(self, vector, k=1):
29
+ distances, indices = self.index.search(np.array([vector], dtype=np.float32), k)
30
+ return [(self.texts[i], distances[0][j]) for j, i in enumerate(indices[0]) if i != -1]