[1.15] New BQ methods docs (#1798)

* bq-new-methods-1-15

* fix snippets path

* fix snippets

* update 2bit description

* Update qdrant-landing/content/documentation/headless/snippets/create-collection/with-binary-quantization-and-query-encoding/go.md

* Update qdrant-landing/content/documentation/guides/quantization.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update go.md

* review text and update some snippets

* simplify query encoding for rust

* upd rust snippets

* Update quantization.md

---------

Co-authored-by: Anush <anushshetty90@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
This commit is contained in:
Ivan Pleshkov
2025-07-18 13:23:30 +02:00
committed by GitHub
co-authored by Copilot Anush Andrey Vasnetsov
parent 1af478e8c7
commit fe7a45a4ad
19 changed files with 376 additions and 2 deletions
@@ -0,0 +1,3 @@
This code configures a new collection with 2-bit binary quantization.
2-bit binary quantization allows to improve precision of the search results at a slight cost of storage size.
There are other bit depths available: for example: `two_bits` and `one_and_half_bits`.
@@ -0,0 +1,18 @@
```csharp
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.CreateCollectionAsync(
collectionName: "{collection_name}",
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
quantizationConfig: new QuantizationConfig
{
Binary = new BinaryQuantization {
Encoding = BinaryQuantizationEncoding.TwoBits,
AlwaysRam = true
}
}
);
```
@@ -0,0 +1,26 @@
```go
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
CollectionName: "{collection_name}",
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
Size: 1536,
Distance: qdrant.Distance_Cosine,
}),
QuantizationConfig: qdrant.NewQuantizationBinary(
&qdrant.BinaryQuantization{
Encoding: qdrant.BinaryQuantizationEncoding_TwoBits.Enum(),
AlwaysRam: qdrant.PtrOf(true),
},
),
})
```
@@ -0,0 +1,15 @@
```http
PUT /collections/{collection_name}
{
"vectors": {
"size": 1536,
"distance": "Cosine"
},
"quantization_config": {
"binary": {
"encoding": "two_bits",
"always_ram": true
}
}
}
```
@@ -0,0 +1,37 @@
```java
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.BinaryQuantization;
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.VectorParams;
import io.qdrant.client.grpc.Collections.VectorsConfig;
import io.qdrant.client.grpc.Collections.BinaryQuantizationEncoding;
QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
client
.createCollectionAsync(
CreateCollection.newBuilder()
.setCollectionName("{collection_name}")
.setVectorsConfig(
VectorsConfig.newBuilder()
.setParams(
VectorParams.newBuilder()
.setSize(1536)
.setDistance(Distance.Cosine)
.build())
.build())
.setQuantizationConfig(
QuantizationConfig.newBuilder()
.setBinary(BinaryQuantization
.newBuilder()
.setEncoding(BinaryQuantizationEncoding.TwoBits)
.setAlwaysRam(true)
.build())
.build())
.build())
.get();
```
@@ -0,0 +1,16 @@
```python
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="{collection_name}",
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
quantization_config=models.BinaryQuantization(
binary=models.BinaryQuantizationConfig(
encoding=models.BinaryQuantizationEncoding.TWO_BITS,
always_ram=True,
),
),
)
```
@@ -0,0 +1,22 @@
```rust
use qdrant_client::qdrant::{
BinaryQuantizationBuilder,
CreateCollectionBuilder,
Distance,
VectorParamsBuilder,
BinaryQuantizationEncoding,
};
use qdrant_client::Qdrant;
let client = Qdrant::from_url("http://localhost:6334").build()?;
client
.create_collection(
CreateCollectionBuilder::new("{collection_name}")
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
.quantization_config(BinaryQuantizationBuilder::new(true)
.encoding(BinaryQuantizationEncoding::TwoBits)
),
)
.await?;
```
@@ -0,0 +1,18 @@
```typescript
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.createCollection("{collection_name}", {
vectors: {
size: 1536,
distance: "Cosine",
},
quantization_config: {
binary: {
encoding: "two_bits",
always_ram: true,
},
},
});
```
@@ -0,0 +1,4 @@
This code configures a new collection with binary quantization with asymmetric quantization.
Asymmetric quantization may have different bit depth, in this example we use 1 bit for stored vectors and 8 bits for query encoding.
Using asymmetric quantization allows to improve precision of the search results at a slight cost of performance.
@@ -0,0 +1,21 @@
```csharp
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.CreateCollectionAsync(
collectionName: "{collection_name}",
vectorsConfig: new VectorParams { Size = 1536, Distance = Distance.Cosine },
quantizationConfig: new QuantizationConfig
{
Binary = new BinaryQuantization {
QueryEncoding = new BinaryQuantizationQueryEncoding
{
Setting = BinaryQuantizationQueryEncoding.Types.Setting.Scalar8Bits,
},
AlwaysRam = true
}
}
);
```
@@ -0,0 +1,26 @@
```go
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
CollectionName: "{collection_name}",
VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
Size: 1536,
Distance: qdrant.Distance_Cosine,
}),
QuantizationConfig: qdrant.NewQuantizationBinary(
&qdrant.BinaryQuantization{
QueryEncoding: qdrant.NewBinaryQuantizationQueryEncodingSetting(BinaryQuantizationQueryEncoding_Scalar8Bits),
AlwaysRam: qdrant.PtrOf(true),
},
),
})
```
@@ -0,0 +1,15 @@
```http
PUT /collections/{collection_name}
{
"vectors": {
"size": 1536,
"distance": "Cosine"
},
"quantization_config": {
"binary": {
"query_encoding": "scalar8bits",
"always_ram": true
}
}
}
```
@@ -0,0 +1,39 @@
```java
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.BinaryQuantization;
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.VectorParams;
import io.qdrant.client.grpc.Collections.VectorsConfig;
import io.qdrant.client.grpc.Collections.BinaryQuantizationQueryEncoding;
QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
client
.createCollectionAsync(
CreateCollection.newBuilder()
.setCollectionName("{collection_name}")
.setVectorsConfig(
VectorsConfig.newBuilder()
.setParams(
VectorParams.newBuilder()
.setSize(1536)
.setDistance(Distance.Cosine)
.build())
.build())
.setQuantizationConfig(
QuantizationConfig.newBuilder()
.setBinary(BinaryQuantization.newBuilder()
.setQueryEncoding(BinaryQuantizationQueryEncoding
.newBuilder()
.setSetting(BinaryQuantizationQueryEncoding.Setting.Scalar8Bits)
.build())
.setAlwaysRam(true)
.build())
.build())
.build())
.get();
```
@@ -0,0 +1,16 @@
```python
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="{collection_name}",
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
quantization_config=models.BinaryQuantization(
binary=models.BinaryQuantizationConfig(
query_encoding=models.BinaryQuantizationQueryEncoding.SCALAR8BITS,
always_ram=True,
),
),
)
```
@@ -0,0 +1,23 @@
```rust
use qdrant_client::qdrant::{
BinaryQuantizationBuilder,
CreateCollectionBuilder,
Distance,
VectorParamsBuilder,
BinaryQuantizationQueryEncoding,
};
use qdrant_client::Qdrant;
let client = Qdrant::from_url("http://localhost:6334").build()?;
client
.create_collection(
CreateCollectionBuilder::new("{collection_name}")
.vectors_config(VectorParamsBuilder::new(1536, Distance::Cosine))
.quantization_config(
BinaryQuantizationBuilder::new(true)
.query_encoding(BinaryQuantizationQueryEncoding::scalar8bits())
),
)
.await?;
```
@@ -0,0 +1,18 @@
```typescript
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.createCollection("{collection_name}", {
vectors: {
size: 1536,
distance: "Cosine",
},
quantization_config: {
binary: {
query_encoding: "scalar8bits",
always_ram: true,
},
},
});
```