This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
स्व-शोषण सदिश डाटाबेस क्यूवर के साथ: एक गहरा नृत्य
Sunday, 23 November 2025
परिचय
RAG से संबंधित: इस लेख में क्यूवेवर में एक गहरा रिलेक्ट प्रदान किया गया है, सदिश डाटाबेस जिसमें उपयोग में लिया गया है:
- एक भाग ४: ऑन- पृष्ठ (N) - निर्माण स्थल खोज
- पार्ट 5: Hybd खोज स्वचलित किया जा रहा है - उत्पाद एकीकरण
स्केल्स (Applause.) एक ओपन-source वेक्टर डाटाबेस है जो रस्ट में बनाया गया है. इस लेख में मुख्य धारणाएँ, सी# ग्राहक, प्रदर्शनिंग, और उत्पादन पैटर्न.
क्वीप क्या है?
ए सदिश डाटाबेस उच्च- चिप वेक्टर भंडारित करता है (एमसेलिंग्स) और तेज समानता खोज सक्षम करता है. पारंपरिक डाटाबेस से अलग है जो सटीक मिलते हैं, Qdctial पाया जाता है इसी तरह की ज़्यादती वस्तु.
flowchart LR
A[Text: 'Docker deployment'] --> B[Embedding Model]
B --> C["Vector: [0.12, -0.34, 0.56, ...]"]
C --> D[Qdrant]
E[Query: 'container setup'] --> F[Embedding Model]
F --> G["Vector: [0.11, -0.32, 0.58, ...]"]
G --> H[Similarity Search]
D --> H
H --> I[Similar Results]
style B stroke:#6366f1,stroke-width:3px
style D stroke:#ef4444,stroke-width:3px
style F stroke:#6366f1,stroke-width:3px
style H stroke:#10b981,stroke-width:2px
कुंजी हटाया गया गुण:
- प्रवेश इंडेक्सिंग - उप- पंक्ति खोज समय
- फ़िल्टर किया जा रहा है - समानता समानता मेटाडाटा फिल्टर सहित खोजGenericName
- ग्नूपीसी & रिटाक्स - उच्च-स्थान पहुँच
- ट्रैक जानकारी - आड़ा स्केल करें
- स्नेपशॉट - बैकअप और पुनर्भंडारण
कोरलेट्स
संग्रह
ए संग्रह एक तालिका की तरह यह वेक्टर एक निश्चित आयाम और दूरी के साथ रहता है... / मैं
flowchart TB
subgraph Collection["Collection: blog_posts"]
A[Vector Size: 384]
B[Distance: Cosine]
C[HNSW Index]
end
subgraph Points
D[Point 1: slug=docker-intro]
E[Point 2: slug=kubernetes-basics]
F[Point N...]
end
Collection --> Points
style A stroke:#6366f1,stroke-width:2px
style B stroke:#6366f1,stroke-width:2px
style C stroke:#f59e0b,stroke-width:2px
style D stroke:#10b981,stroke-width:2px
style E stroke:#10b981,stroke-width:2px
// Create collection - see https://qdrant.tech/documentation/concepts/collections/#create-a-collection
await client.CreateCollectionAsync(
collectionName: "blog_posts",
vectorsConfig: new VectorParams
{
Size = 384, // Must match your embedding model
Distance = Distance.Cosine // Best for text embeddings
}
);
दूरी बीजीय (Docs):
- कोसाइन - सदिशों के बीच कोण मापें ( पाठ के लिए सबसे अच्छा)
- डॉट - आंतरिक उत्पाद (सामान्य रूप से सामान्य सदिश के लिए)
- यूक्लिड - ज्यामितीय दूरी (सियल डाटा के लिए)
अंक
ए बिन्दु एक लिखा हुआ दफ़तर है जिसमें शयातीन के (आमाल दर्ज हैं)
flowchart LR
subgraph Point
A[ID: uuid/int]
B["Vector: float[384]"]
C[Payload: JSON metadata]
end
style A stroke:#8b5cf6,stroke-width:2px
style B stroke:#f59e0b,stroke-width:2px
style C stroke:#10b981,stroke-width:2px
// Upsert points - see https://qdrant.tech/documentation/concepts/points/#upload-points
var point = new PointStruct
{
Id = new PointId { Uuid = Guid.NewGuid().ToString() },
Vectors = embedding, // float[384]
Payload =
{
["slug"] = "my-post",
["title"] = "Vector Databases",
["language"] = "en",
["categories"] = new[] { "AI", "Databases" },
["published"] = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
}
};
await client.UpsertAsync("blog_posts", points: new[] { point });
फ़िल्टर किया जा रहा है
फ़िल्टर किया जा रहा है भागें पहले समानता खोज - अति कुशल है ।
flowchart TB
A[Search Query] --> B{Apply Filters First}
B --> C[Language = 'en']
B --> D[Year >= 2024]
C --> E[Filtered Subset]
D --> E
E --> F[Vector Similarity Search]
F --> G[Ranked Results]
style B stroke:#ec4899,stroke-width:3px
style E stroke:#f59e0b,stroke-width:2px
style F stroke:#6366f1,stroke-width:2px
style G stroke:#10b981,stroke-width:2px
// Filter conditions - see https://qdrant.tech/documentation/concepts/filtering/#filtering-conditions
var filter = new Filter
{
Must = // AND conditions
{
new Condition { Field = new FieldCondition
{
Key = "language",
Match = new Match { Keyword = "en" }
}},
new Condition { Field = new FieldCondition
{
Key = "published",
Range = new Range { Gte = 1704067200 } // 2024-01-01
}}
},
MustNot = // Exclude conditions
{
new Condition { Field = new FieldCondition
{
Key = "slug",
Match = new Match { Keyword = "draft-post" }
}}
}
};
फ़िल्टर क़िस्म (Docs):
Match.Keyword- सटीक स्ट्रिंग मिलानMatch.Text- पूर्ण पाठ जोड़Match.Any- किसी भी क्रम में मिलाएँRange- न्यूमेरिक सीमाएँ (Gt, Lt, Lt, Lt)GeoBoundingBox/GeoRadius- ढूंढें पंक्ति
C# क्लाएंट
आधिकारिक संस्थापित करें क्यूवर.Cartent पैकेज (S)GiHh):
dotnet add package Qdrant.Client
कनेक्शन सेटअप
using Qdrant.Client;
using Qdrant.Client.Grpc;
// gRPC client (recommended) - see https://qdrant.tech/documentation/interfaces/#grpc-interface
var client = new QdrantClient(
host: "localhost",
port: 6334, // gRPC port (6333 is REST)
https: false
);
// With API key - see https://qdrant.tech/documentation/guides/security/
var secureClient = new QdrantClient(
host: "your-qdrant.cloud",
port: 6334,
https: true,
apiKey: "your-api-key"
);
हमेशा gRPC का प्रयोग करें (पोर्ट 6334) उत्पादन के लिए - 3-5x तेजी से
विंडोज़ एचटीटीपी/2 ठीक
विंडोज़ पर, अनएनक्रिप्टेड HTTP/2 सक्षम करें पहले क्लाएंट बनाया जा रहा है:
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
कुंजी संचालन
ढूंढें
// Vector search - see https://qdrant.tech/documentation/concepts/search/
var results = await client.SearchAsync(
collectionName: "blog_posts",
vector: queryEmbedding,
limit: 10,
filter: filter,
scoreThreshold: 0.5f, // Minimum similarity
searchParams: new SearchParams
{
HnswEf = 128, // Search accuracy (higher = better recall)
Exact = false // Use approximate search
},
withPayload: true
);
foreach (var result in results)
{
Console.WriteLine($"{result.Payload["title"].StringValue}: {result.Score}");
}
बैच अप जिन्हों ने भेंट की है
// Batch operations - see https://qdrant.tech/documentation/concepts/points/#batch-update
var points = documents.Select(doc => new PointStruct
{
Id = new PointId { Uuid = doc.Id },
Vectors = doc.Embedding,
Payload = { ["slug"] = doc.Slug, ["title"] = doc.Title }
}).ToList();
await client.UpsertAsync(
collectionName: "blog_posts",
points: points,
wait: true // Wait for indexing
);
मिटाएँ
// Delete by filter - see https://qdrant.tech/documentation/concepts/points/#delete-points
await client.DeleteAsync(
collectionName: "blog_posts",
filter: new Filter
{
Must = { new Condition { Field = new FieldCondition
{
Key = "slug",
Match = new Match { Keyword = "old-post" }
}}}
}
);
प्रवेश निर्देशिका स्टिकिंग
एचडबल्यू (Hrigigoglable छोटी दुनिया) Qdict की निर्देशिका एल्गोरिथ्म है.
flowchart TB
subgraph "HNSW Graph Layers"
L2[Layer 2 - Sparse]
L1[Layer 1 - Medium]
L0[Layer 0 - Dense]
end
Q[Query] --> L2
L2 --> L1
L1 --> L0
L0 --> R[Nearest Neighbors]
style L2 stroke:#8b5cf6,stroke-width:2px
style L1 stroke:#6366f1,stroke-width:2px
style L0 stroke:#3b82f6,stroke-width:2px
style Q stroke:#10b981,stroke-width:2px
style R stroke:#ef4444,stroke-width:2px
निर्देशिका पैरामीटर
// HNSW config - see https://qdrant.tech/documentation/concepts/indexing/#hnsw-index
var hnswConfig = new HnswConfigDiff
{
M = 16, // Edges per node (16-32 recommended)
EfConstruct = 100, // Build-time accuracy (100-200)
FullScanThreshold = 10000 // Brute force threshold
};
await client.UpdateCollectionAsync(
collectionName: "blog_posts",
hnswConfig: hnswConfig
);
खोज- समय सटीकता:
var searchParams = new SearchParams
{
HnswEf = 128 // Higher = better recall, slower (64-256)
};
विन्यास निर्देश: केस केस का प्रयोग करें (c) |----------|---|-------------|--------| सेंटीमीटर तेज, कम याद करते हुए खुदा ने फरमाया कि हम 28,000 लोगों की मदद करें, जो आज तकदीर में विश्वास करते हैं IMTER उच्च याद करते हुए 32 GiL 20004 गुज़रती है
निर्देशिका फिर से लोड करें (o)
बनाएँ निर्देशिका लोड करें बार- बार फिल्टर किए गए क्षेत्र के लिए:
// Keyword index - see https://qdrant.tech/documentation/concepts/indexing/#payload-index
await client.CreatePayloadIndexAsync(
collectionName: "blog_posts",
fieldName: "language",
schemaType: PayloadSchemaType.Keyword
);
// Integer index for ranges
await client.CreatePayloadIndexAsync(
collectionName: "blog_posts",
fieldName: "published",
schemaType: PayloadSchemaType.Integer
);
प्रभाव: 10-100x तेजी से बड़े संग्रह पर फिल्टर.
क्वाडेंसाइजेशन
क्वाडेंसाइजेशन मेमोरी उपयोग कम करता है:
// Scalar quantization - see https://qdrant.tech/documentation/guides/quantization/#scalar-quantization
await client.UpdateCollectionAsync(
collectionName: "blog_posts",
quantizationConfig: new ScalarQuantization
{
Scalar = new ScalarQuantizationConfig
{
Type = ScalarType.Int8, // float32 -> int8
Quantile = 0.99f,
AlwaysRam = true
}
}
);
ट्रायल- ऑफः 4x कम स्मृति, ~2% याद है नुकसान, 1.x तेजी से खोज.
डॉक नाइटिंगमेंट
# docker-compose.yml - see https://qdrant.tech/documentation/guides/installation/
services:
qdrant:
image: qdrant/qdrant:v1.12.1 # Pin version!
ports:
- "6333:6333" # REST
- "6334:6334" # gRPC
volumes:
- qdrant_data:/qdrant/storage
environment:
- QDRANT__SERVICE__GRPC_PORT=6334
- QDRANT__SERVICE__HTTP_PORT=6333
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
qdrant_data:
सुरक्षा
सक्षम करें API कुंजी सत्यापन:
environment:
- QDRANT__SERVICE__API_KEY=your-secret-key
मॉनीटर किया जा रहा है
मेट्रिक्स
कनवर्से्शन पिक्शन्स दिल की धड़कन पर /metrics:
curl http://localhost:6333/metrics
कुंजी बीजीयः
qdrant_collections_vector_count- कुल सदिशqdrant_rest_responses_duration_seconds- लंबी मुद्रा क्वैरी करेंqdrant_memory_usage_bytes- मेमोरी पीने
स्नेपशॉट
बनाएँ बैकअप्स:
# Create snapshot
curl -X POST http://localhost:6333/collections/blog_posts/snapshots
# List snapshots
curl http://localhost:6333/collections/blog_posts/snapshots
# Restore (copy snapshot to storage/collections/blog_posts/snapshots/)
सामान्य मिल गया
1. पोर्ट कॉनचैंट
- 6333 = rebe API
- 6334 = gRPC एपीआई (इसे प्रयोग करें!)
2. सदिश आयामी फार्मेट
Error: expected dim: 384, got 768
आपके एम्बेडिंग मॉडल और संग्रह से मेल खाना चाहिए:
all-MiniLM-L6-v2: 384 आयामnomic-embed-text: 768 आयाम- डाटा आयात करें
text-embedding-3-small: 1536 आयाम
3. धीमा पहला प्रश्न
प्रारंभ होने के बाद आलसीपन की स्मृति में डाल देता है.
await client.SearchAsync("blog_posts", new float[384], limit: 1);
4. आररे फ़िल्टरिंग
प्रयोक्ता Match.Any ऐरे क्षेत्रों के लिए:
new Match { Any = new RepeatedStrings { Strings = { "AI", "ML" } } }
संसाधन
आधिकारिक क्वीशन दस्तावेज़ीकरण
- ओवरव्यू - शुरू हो रहा है
- जोड़ा गया - कोर धारणाएँ
- संग्रह - संग्रह बनाया जा रहा है और संभाल रहा है
- अंक - सदिश के साथ काम कर रहा है
- ढूंढें - क्वैरी संचालन
- फ़िल्टर किया जा रहा है - फ़िल्टर स्थिति
- सूचीकरण - प्रवेश करें और निर्देशिकाओं को पूरा करें
- क्वाडेंसाइजेशन - मेमोरी अनुकूलन
- सुरक्षा - सत्यापन
- मॉनीटर किया जा रहा है - अज़ाब और Telsmes
- स्नेपशॉट - बैकअप और पुनर्भंडारण
क्लाएंट लाइब्रेरी
- क्यूवर्वर .नेटटी क्लाएंट - आधिकारिक सी# SKK(K)
- एनयूएपी पैकेज - नवीनतम रिलीज
संबंधित आलेख
स्रोत कोड
सभी कोड इस पर उपलब्ध: gdyb.com/sek/ allyptib
Mostlylucid.SemanticSearch/Services/QdrantVectorStoreService.cs- एकीकरण