RAG से संबंधित: इस लेख में क्यूवेवर में एक गहरा रिलेक्ट प्रदान किया गया है, सदिश डाटाबेस जिसमें उपयोग में लिया गया है:
स्केल्स (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
कुंजी हटाया गया गुण:
ए संग्रह एक तालिका की तरह यह वेक्टर एक निश्चित आयाम और दूरी के साथ रहता है... / मैं
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 - ढूंढें पंक्तिआधिकारिक संस्थापित करें क्यूवर.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 तेजी से
विंडोज़ पर, अनएनक्रिप्टेड 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 गुज़रती है
बनाएँ निर्देशिका लोड करें बार- बार फिल्टर किए गए क्षेत्र के लिए:
// 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/)
Error: expected dim: 384, got 768
आपके एम्बेडिंग मॉडल और संग्रह से मेल खाना चाहिए:
all-MiniLM-L6-v2: 384 आयामnomic-embed-text: 768 आयामtext-embedding-3-small: 1536 आयामप्रारंभ होने के बाद आलसीपन की स्मृति में डाल देता है.
await client.SearchAsync("blog_posts", new float[384], limit: 1);
प्रयोक्ता Match.Any ऐरे क्षेत्रों के लिए:
new Match { Any = new RepeatedStrings { Strings = { "AI", "ML" } } }
सभी कोड इस पर उपलब्ध: gdyb.com/sek/ allyptib
Mostlylucid.SemanticSearch/Services/QdrantVectorStoreService.cs - एकीकरण© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.