mirror of
https://github.com/qdrant/landing_page.git
synced 2026-10-03 01:48:32 +02:00
Add TurboQuant quantization documentation (v1.18.0) (#2313)
* Add TurboQuant quantization documentation (v1.18.0) Adds a new TurboQuant section to the quantization guide covering the four encoding options (bits1/bits1_5/bits2/bits4), automatic asymmetric quantization, distance metric support, and the automatic TQ+ precision enhancement for sealed segments. Updates the comparison table and method-selection guidance to recommend TurboQuant over Binary and Scalar Quantization for new collections. Adds HTTP-only snippets for basic setup and explicit bit-depth selection. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Consistently use title case for headers * Restructure doc to lead with TurboQuant * Clarify rescoring * Edits * Soften TQ advice * Updates * Fix * Apply suggestions from code review Co-authored-by: Jojii <15957865+JojiiOfficial@users.noreply.github.com> * Review feedback * Add Go/Java/C# code snippets * Add list of 4 quantization methods to introduction * Review feedback * Stronger advice for TQ4 * Add Python snippets * Add Rust snippets * Add TS snippets * Update recommendation table * Update production checklist * Remove link to article --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Jojii <15957865+JojiiOfficial@users.noreply.github.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
Jojii
parent
2746db8762
commit
46e81449a8
+1
@@ -0,0 +1 @@
|
||||
This code creates a collection with TurboQuant using 2-bit encoding. Specify `bits` to select the compression level. Available values are `bits4` (default, 8× compression), `bits2` (16× compression), `bits1_5` (24× compression), and `bits1` (32× compression).
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
using Qdrant.Client;
|
||||
using Qdrant.Client.Grpc;
|
||||
|
||||
public class Snippet
|
||||
{
|
||||
public static async Task Run()
|
||||
{
|
||||
// @hide-start
|
||||
var client = new QdrantClient("localhost", 6334);
|
||||
// @hide-end
|
||||
|
||||
await client.CreateCollectionAsync(
|
||||
collectionName: "{collection_name}",
|
||||
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
|
||||
quantizationConfig: new QuantizationConfig
|
||||
{
|
||||
Turboquant = new TurboQuantization { AlwaysRam = true, Bits = TurboQuantBitSize.Bits2 }
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
```csharp
|
||||
using Qdrant.Client;
|
||||
using Qdrant.Client.Grpc;
|
||||
|
||||
await client.CreateCollectionAsync(
|
||||
collectionName: "{collection_name}",
|
||||
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
|
||||
quantizationConfig: new QuantizationConfig
|
||||
{
|
||||
Turboquant = new TurboQuantization { AlwaysRam = true, Bits = TurboQuantBitSize.Bits2 }
|
||||
}
|
||||
);
|
||||
```
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
```go
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
|
||||
CollectionName: "{collection_name}",
|
||||
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
|
||||
Size: 1536,
|
||||
Distance: qdrant.Distance_Cosine,
|
||||
}),
|
||||
QuantizationConfig: qdrant.NewQuantizationTurbo(
|
||||
&qdrant.TurboQuantization{
|
||||
AlwaysRam: qdrant.PtrOf(true),
|
||||
Bits: qdrant.TurboQuantBitSize_Bits2.Enum(),
|
||||
},
|
||||
),
|
||||
})
|
||||
```
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
```java
|
||||
import io.qdrant.client.QdrantClient;
|
||||
import io.qdrant.client.QdrantGrpcClient;
|
||||
import io.qdrant.client.grpc.Collections.CreateCollection;
|
||||
import io.qdrant.client.grpc.Collections.Distance;
|
||||
import io.qdrant.client.grpc.Collections.QuantizationConfig;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantBitSize;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantization;
|
||||
import io.qdrant.client.grpc.Collections.VectorParams;
|
||||
import io.qdrant.client.grpc.Collections.VectorsConfig;
|
||||
|
||||
client
|
||||
.createCollectionAsync(
|
||||
CreateCollection.newBuilder()
|
||||
.setCollectionName("{collection_name}")
|
||||
.setVectorsConfig(
|
||||
VectorsConfig.newBuilder()
|
||||
.setParams(
|
||||
VectorParams.newBuilder()
|
||||
.setSize(1536)
|
||||
.setDistance(Distance.Cosine)
|
||||
.build())
|
||||
.build())
|
||||
.setQuantizationConfig(
|
||||
QuantizationConfig.newBuilder()
|
||||
.setTurboquant(
|
||||
TurboQuantization.newBuilder()
|
||||
.setAlwaysRam(true)
|
||||
.setBits(TurboQuantBitSize.Bits2)
|
||||
.build())
|
||||
.build())
|
||||
.build())
|
||||
.get();
|
||||
```
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
```python
|
||||
from qdrant_client import QdrantClient, models
|
||||
|
||||
client.create_collection(
|
||||
collection_name="{collection_name}",
|
||||
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
|
||||
quantization_config=models.TurboQuantization(
|
||||
turbo=models.TurboQuantQuantizationConfig(
|
||||
always_ram=True,
|
||||
bits=models.TurboQuantBitSize.BITS2,
|
||||
),
|
||||
),
|
||||
)
|
||||
```
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
```rust
|
||||
use qdrant_client::qdrant::{
|
||||
CreateCollectionBuilder, Distance, TurboQuantBitSize, TurboQuantizationBuilder,
|
||||
VectorParamsBuilder,
|
||||
};
|
||||
use qdrant_client::Qdrant;
|
||||
|
||||
client
|
||||
.create_collection(
|
||||
CreateCollectionBuilder::new("{collection_name}")
|
||||
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
|
||||
.quantization_config(
|
||||
TurboQuantizationBuilder::new()
|
||||
.always_ram(true)
|
||||
.bits(TurboQuantBitSize::Bits2),
|
||||
),
|
||||
)
|
||||
.await?;
|
||||
```
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
```typescript
|
||||
import { QdrantClient } from "@qdrant/js-client-rest";
|
||||
|
||||
client.createCollection("{collection_name}", {
|
||||
vectors: {
|
||||
size: 1536,
|
||||
distance: "Cosine",
|
||||
},
|
||||
quantization_config: {
|
||||
turbo: {
|
||||
always_ram: true,
|
||||
bits: "bits2",
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package snippet
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
func Main() {
|
||||
// @hide-start
|
||||
client, err := qdrant.NewClient(&qdrant.Config{
|
||||
Host: "localhost",
|
||||
Port: 6334,
|
||||
})
|
||||
|
||||
if err != nil { panic(err) }
|
||||
// @hide-end
|
||||
|
||||
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
|
||||
CollectionName: "{collection_name}",
|
||||
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
|
||||
Size: 1536,
|
||||
Distance: qdrant.Distance_Cosine,
|
||||
}),
|
||||
QuantizationConfig: qdrant.NewQuantizationTurbo(
|
||||
&qdrant.TurboQuantization{
|
||||
AlwaysRam: qdrant.PtrOf(true),
|
||||
Bits: qdrant.TurboQuantBitSize_Bits2.Enum(),
|
||||
},
|
||||
),
|
||||
})
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
```http
|
||||
PUT /collections/{collection_name}
|
||||
{
|
||||
"vectors": {
|
||||
"size": 1536,
|
||||
"distance": "Cosine"
|
||||
},
|
||||
"quantization_config": {
|
||||
"turbo": {
|
||||
"bits": "bits2",
|
||||
"always_ram": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.example.snippets_amalgamation;
|
||||
|
||||
import io.qdrant.client.QdrantClient;
|
||||
import io.qdrant.client.QdrantGrpcClient;
|
||||
import io.qdrant.client.grpc.Collections.CreateCollection;
|
||||
import io.qdrant.client.grpc.Collections.Distance;
|
||||
import io.qdrant.client.grpc.Collections.QuantizationConfig;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantBitSize;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantization;
|
||||
import io.qdrant.client.grpc.Collections.VectorParams;
|
||||
import io.qdrant.client.grpc.Collections.VectorsConfig;
|
||||
|
||||
public class Snippet {
|
||||
public static void run() throws Exception {
|
||||
// @hide-start
|
||||
QdrantClient client =
|
||||
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
|
||||
// @hide-end
|
||||
|
||||
client
|
||||
.createCollectionAsync(
|
||||
CreateCollection.newBuilder()
|
||||
.setCollectionName("{collection_name}")
|
||||
.setVectorsConfig(
|
||||
VectorsConfig.newBuilder()
|
||||
.setParams(
|
||||
VectorParams.newBuilder()
|
||||
.setSize(1536)
|
||||
.setDistance(Distance.Cosine)
|
||||
.build())
|
||||
.build())
|
||||
.setQuantizationConfig(
|
||||
QuantizationConfig.newBuilder()
|
||||
.setTurboquant(
|
||||
TurboQuantization.newBuilder()
|
||||
.setAlwaysRam(true)
|
||||
.setBits(TurboQuantBitSize.Bits2)
|
||||
.build())
|
||||
.build())
|
||||
.build())
|
||||
.get();
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
from qdrant_client import QdrantClient, models
|
||||
|
||||
# @hide-start
|
||||
client = QdrantClient(url="http://localhost:6333")
|
||||
# @hide-end
|
||||
|
||||
client.create_collection(
|
||||
collection_name="{collection_name}",
|
||||
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
|
||||
quantization_config=models.TurboQuantization(
|
||||
turbo=models.TurboQuantQuantizationConfig(
|
||||
always_ram=True,
|
||||
bits=models.TurboQuantBitSize.BITS2,
|
||||
),
|
||||
),
|
||||
)
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
use qdrant_client::qdrant::{
|
||||
CreateCollectionBuilder, Distance, TurboQuantBitSize, TurboQuantizationBuilder,
|
||||
VectorParamsBuilder,
|
||||
};
|
||||
use qdrant_client::Qdrant;
|
||||
|
||||
pub async fn main() -> anyhow::Result<()> {
|
||||
// @hide-start
|
||||
let client = Qdrant::from_url("http://localhost:6334").build()?;
|
||||
// @hide-end
|
||||
|
||||
client
|
||||
.create_collection(
|
||||
CreateCollectionBuilder::new("{collection_name}")
|
||||
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
|
||||
.quantization_config(
|
||||
TurboQuantizationBuilder::new()
|
||||
.always_ram(true)
|
||||
.bits(TurboQuantBitSize::Bits2),
|
||||
),
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import { QdrantClient } from "@qdrant/js-client-rest";
|
||||
|
||||
// @hide-start
|
||||
const client = new QdrantClient({ host: "localhost", port: 6333 });
|
||||
// @hide-end
|
||||
|
||||
client.createCollection("{collection_name}", {
|
||||
vectors: {
|
||||
size: 1536,
|
||||
distance: "Cosine",
|
||||
},
|
||||
quantization_config: {
|
||||
turbo: {
|
||||
always_ram: true,
|
||||
bits: "bits2",
|
||||
},
|
||||
},
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
This code creates a collection with TurboQuant enabled using the default 4-bit encoding. To enable TurboQuant on an existing collection, use a PATCH request or the `update_collection` method and omit the vector configuration.
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
using Qdrant.Client;
|
||||
using Qdrant.Client.Grpc;
|
||||
|
||||
public class Snippet
|
||||
{
|
||||
public static async Task Run()
|
||||
{
|
||||
// @hide-start
|
||||
var client = new QdrantClient("localhost", 6334);
|
||||
// @hide-end
|
||||
|
||||
await client.CreateCollectionAsync(
|
||||
collectionName: "{collection_name}",
|
||||
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
|
||||
quantizationConfig: new QuantizationConfig
|
||||
{
|
||||
Turboquant = new TurboQuantization { AlwaysRam = true }
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
```csharp
|
||||
using Qdrant.Client;
|
||||
using Qdrant.Client.Grpc;
|
||||
|
||||
await client.CreateCollectionAsync(
|
||||
collectionName: "{collection_name}",
|
||||
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
|
||||
quantizationConfig: new QuantizationConfig
|
||||
{
|
||||
Turboquant = new TurboQuantization { AlwaysRam = true }
|
||||
}
|
||||
);
|
||||
```
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
```go
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
|
||||
CollectionName: "{collection_name}",
|
||||
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
|
||||
Size: 1536,
|
||||
Distance: qdrant.Distance_Cosine,
|
||||
}),
|
||||
QuantizationConfig: qdrant.NewQuantizationTurbo(
|
||||
&qdrant.TurboQuantization{
|
||||
AlwaysRam: qdrant.PtrOf(true),
|
||||
},
|
||||
),
|
||||
})
|
||||
```
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
```java
|
||||
import io.qdrant.client.QdrantClient;
|
||||
import io.qdrant.client.QdrantGrpcClient;
|
||||
import io.qdrant.client.grpc.Collections.CreateCollection;
|
||||
import io.qdrant.client.grpc.Collections.Distance;
|
||||
import io.qdrant.client.grpc.Collections.QuantizationConfig;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantization;
|
||||
import io.qdrant.client.grpc.Collections.VectorParams;
|
||||
import io.qdrant.client.grpc.Collections.VectorsConfig;
|
||||
|
||||
client
|
||||
.createCollectionAsync(
|
||||
CreateCollection.newBuilder()
|
||||
.setCollectionName("{collection_name}")
|
||||
.setVectorsConfig(
|
||||
VectorsConfig.newBuilder()
|
||||
.setParams(
|
||||
VectorParams.newBuilder()
|
||||
.setSize(1536)
|
||||
.setDistance(Distance.Cosine)
|
||||
.build())
|
||||
.build())
|
||||
.setQuantizationConfig(
|
||||
QuantizationConfig.newBuilder()
|
||||
.setTurboquant(TurboQuantization.newBuilder().setAlwaysRam(true).build())
|
||||
.build())
|
||||
.build())
|
||||
.get();
|
||||
```
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
```python
|
||||
from qdrant_client import QdrantClient, models
|
||||
|
||||
client.create_collection(
|
||||
collection_name="{collection_name}",
|
||||
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
|
||||
quantization_config=models.TurboQuantization(
|
||||
turbo=models.TurboQuantQuantizationConfig(
|
||||
always_ram=True,
|
||||
),
|
||||
),
|
||||
)
|
||||
```
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
```rust
|
||||
use qdrant_client::qdrant::{
|
||||
CreateCollectionBuilder, Distance, TurboQuantizationBuilder, VectorParamsBuilder,
|
||||
};
|
||||
use qdrant_client::Qdrant;
|
||||
|
||||
client
|
||||
.create_collection(
|
||||
CreateCollectionBuilder::new("{collection_name}")
|
||||
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
|
||||
.quantization_config(TurboQuantizationBuilder::new().always_ram(true)),
|
||||
)
|
||||
.await?;
|
||||
```
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
```typescript
|
||||
import { QdrantClient } from "@qdrant/js-client-rest";
|
||||
|
||||
client.createCollection("{collection_name}", {
|
||||
vectors: {
|
||||
size: 1536,
|
||||
distance: "Cosine",
|
||||
},
|
||||
quantization_config: {
|
||||
turbo: {
|
||||
always_ram: true,
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package snippet
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
func Main() {
|
||||
// @hide-start
|
||||
client, err := qdrant.NewClient(&qdrant.Config{
|
||||
Host: "localhost",
|
||||
Port: 6334,
|
||||
})
|
||||
|
||||
if err != nil { panic(err) }
|
||||
// @hide-end
|
||||
|
||||
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
|
||||
CollectionName: "{collection_name}",
|
||||
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
|
||||
Size: 1536,
|
||||
Distance: qdrant.Distance_Cosine,
|
||||
}),
|
||||
QuantizationConfig: qdrant.NewQuantizationTurbo(
|
||||
&qdrant.TurboQuantization{
|
||||
AlwaysRam: qdrant.PtrOf(true),
|
||||
},
|
||||
),
|
||||
})
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
```http
|
||||
PUT /collections/{collection_name}
|
||||
{
|
||||
"vectors": {
|
||||
"size": 1536,
|
||||
"distance": "Cosine"
|
||||
},
|
||||
"quantization_config": {
|
||||
"turbo": {
|
||||
"always_ram": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.example.snippets_amalgamation;
|
||||
|
||||
import io.qdrant.client.QdrantClient;
|
||||
import io.qdrant.client.QdrantGrpcClient;
|
||||
import io.qdrant.client.grpc.Collections.CreateCollection;
|
||||
import io.qdrant.client.grpc.Collections.Distance;
|
||||
import io.qdrant.client.grpc.Collections.QuantizationConfig;
|
||||
import io.qdrant.client.grpc.Collections.TurboQuantization;
|
||||
import io.qdrant.client.grpc.Collections.VectorParams;
|
||||
import io.qdrant.client.grpc.Collections.VectorsConfig;
|
||||
|
||||
public class Snippet {
|
||||
public static void run() throws Exception {
|
||||
// @hide-start
|
||||
QdrantClient client =
|
||||
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
|
||||
// @hide-end
|
||||
|
||||
client
|
||||
.createCollectionAsync(
|
||||
CreateCollection.newBuilder()
|
||||
.setCollectionName("{collection_name}")
|
||||
.setVectorsConfig(
|
||||
VectorsConfig.newBuilder()
|
||||
.setParams(
|
||||
VectorParams.newBuilder()
|
||||
.setSize(1536)
|
||||
.setDistance(Distance.Cosine)
|
||||
.build())
|
||||
.build())
|
||||
.setQuantizationConfig(
|
||||
QuantizationConfig.newBuilder()
|
||||
.setTurboquant(TurboQuantization.newBuilder().setAlwaysRam(true).build())
|
||||
.build())
|
||||
.build())
|
||||
.get();
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
from qdrant_client import QdrantClient, models
|
||||
|
||||
# @hide-start
|
||||
client = QdrantClient(url="http://localhost:6333")
|
||||
# @hide-end
|
||||
|
||||
client.create_collection(
|
||||
collection_name="{collection_name}",
|
||||
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
|
||||
quantization_config=models.TurboQuantization(
|
||||
turbo=models.TurboQuantQuantizationConfig(
|
||||
always_ram=True,
|
||||
),
|
||||
),
|
||||
)
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
use qdrant_client::qdrant::{
|
||||
CreateCollectionBuilder, Distance, TurboQuantizationBuilder, VectorParamsBuilder,
|
||||
};
|
||||
use qdrant_client::Qdrant;
|
||||
|
||||
pub async fn main() -> anyhow::Result<()> {
|
||||
// @hide-start
|
||||
let client = Qdrant::from_url("http://localhost:6334").build()?;
|
||||
// @hide-end
|
||||
|
||||
client
|
||||
.create_collection(
|
||||
CreateCollectionBuilder::new("{collection_name}")
|
||||
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
|
||||
.quantization_config(TurboQuantizationBuilder::new().always_ram(true)),
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
import { QdrantClient } from "@qdrant/js-client-rest";
|
||||
|
||||
// @hide-start
|
||||
const client = new QdrantClient({ host: "localhost", port: 6333 });
|
||||
// @hide-end
|
||||
|
||||
client.createCollection("{collection_name}", {
|
||||
vectors: {
|
||||
size: 1536,
|
||||
distance: "Cosine",
|
||||
},
|
||||
quantization_config: {
|
||||
turbo: {
|
||||
always_ram: true,
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user