File size: 1,491 Bytes
9408cb5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# qdrant_search.py

from typing import List, Dict
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
from qdrant_client import QdrantClient

class QdrantSearch:
    def __init__(self, qdrant_url: str, api_key: str, embeddings):
        self.embeddings=embeddings
        # Initialize Qdrant client
        self.client = QdrantClient(
            url=qdrant_url,
            api_key=api_key,
        )

    def query_qdrant(self, query: str, collection_name: str, limit: int = 5) -> List:
        """Retrieve relevant documents from Qdrant."""
        query_vector = self.embeddings.get_embeddings(query)
        
        results = self.client.search(
            collection_name=collection_name,
            query_vector=query_vector,
            limit=limit
        )
        return results

    def query_multiple_collections(self, query: str, collection_names: List[str], limit: int = 5) -> List[Dict]:
        """Query multiple Qdrant collections and return combined top results."""
        all_results = []
        
        for collection_name in collection_names:
            results = self.query_qdrant(query, collection_name, limit)
            for result in results:
                all_results.append({
                    'text': result.payload['text'],
                    'source': result.payload['source'],
                    'score': result.score
                })
        
        return sorted(all_results, key=lambda x: x['score'], reverse=True)[:limit]