Skip to content

Commit cc4db55

Browse files
authored
Merge pull request qdrant#238 from qdrant/enable-index-while-uploading
Enable indexing while uploading
2 parents 799aa4f + b0b5e52 commit cc4db55

File tree

4 files changed

+32
-21
lines changed

4 files changed

+32
-21
lines changed

engine/clients/qdrant/configure.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,16 @@ def recreate(self, dataset: Dataset, collection_params):
6969
if not set(payload_index_params.keys()).issubset(dataset.config.schema.keys()):
7070
raise ValueError("payload_index_params are not found in dataset schema")
7171

72+
optimizers_config = self.collection_params.setdefault("optimizers_config", {})
73+
# By default, disable index building while uploading
74+
optimizers_config.setdefault("max_optimization_threads", 0)
75+
7276
self.client.recreate_collection(
7377
collection_name=QDRANT_COLLECTION_NAME,
7478
**vectors_config,
7579
**self.collection_params
7680
)
77-
self.client.update_collection(
78-
collection_name=QDRANT_COLLECTION_NAME,
79-
optimizer_config=rest.OptimizersConfigDiff(
80-
# indexing_threshold=10000000,
81-
max_optimization_threads=0,
82-
),
83-
)
81+
8482
for field_name, field_type in dataset.config.schema.items():
8583
if field_type in ["keyword", "uuid"]:
8684
is_tenant = payload_index_params.get(field_name, {}).get(

engine/clients/qdrant/upload.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,17 @@ def upload_batch(cls, batch: List[Record]):
5858

5959
@classmethod
6060
def post_upload(cls, _distance):
61-
cls.client.update_collection(
62-
collection_name=QDRANT_COLLECTION_NAME,
63-
optimizer_config=OptimizersConfigDiff(
64-
# indexing_threshold=10_000,
65-
# Set to a high number to not apply limits, already limited by CPU budget
66-
max_optimization_threads=100_000,
67-
),
68-
)
61+
# If index building is disabled through the collection settings, enable it
62+
collection = cls.client.get_collection(collection_name=QDRANT_COLLECTION_NAME)
63+
if collection.config.optimizer_config.max_optimization_threads == 0:
64+
cls.client.update_collection(
65+
collection_name=QDRANT_COLLECTION_NAME,
66+
optimizer_config=OptimizersConfigDiff(
67+
# indexing_threshold=10_000,
68+
# Set to a high number to not apply limits, already limited by CPU budget
69+
max_optimization_threads=100_000,
70+
),
71+
)
6972

7073
cls.wait_collection_green()
7174
return {}

experiments/configurations/qdrant-on-disk.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
"engine": "qdrant",
1818
"connection_params": {},
1919
"collection_params": {
20-
"optimizers_config": { "default_segment_number": 17 },
20+
"optimizers_config": {
21+
"default_segment_number": 17,
22+
"max_optimization_threads": null
23+
},
2124
"quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} },
2225
"vectors_config": { "on_disk": true },
2326
"hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 },
@@ -36,7 +39,10 @@
3639
"engine": "qdrant",
3740
"connection_params": {},
3841
"collection_params": {
39-
"optimizers_config": { "default_segment_number": 17 },
42+
"optimizers_config": {
43+
"default_segment_number": 17,
44+
"max_optimization_threads": null
45+
},
4046
"quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} },
4147
"vectors_config": { "on_disk": true },
4248
"hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 },

experiments/configurations/qdrant-single-node.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"optimizers_config": {
3030
"max_segment_size": 1000000,
3131
"default_segment_number": 3,
32-
"memmap_threshold": 10000000
32+
"memmap_threshold": 10000000,
33+
"max_optimization_threads": null
3334
}
3435
},
3536
"search_params": [
@@ -63,7 +64,8 @@
6364
"optimizers_config": {
6465
"max_segment_size": 1000000,
6566
"default_segment_number": 3,
66-
"memmap_threshold": 10000000
67+
"memmap_threshold": 10000000,
68+
"max_optimization_threads": null
6769
}
6870
},
6971
"search_params": [
@@ -93,7 +95,8 @@
9395
"optimizers_config": {
9496
"max_segment_size": 1000000,
9597
"default_segment_number": 3,
96-
"memmap_threshold": 10000000
98+
"memmap_threshold": 10000000,
99+
"max_optimization_threads": null
97100
}
98101
},
99102
"search_params": [
@@ -120,7 +123,8 @@
120123
"optimizers_config": {
121124
"max_segment_size": 1000000,
122125
"default_segment_number": 3,
123-
"memmap_threshold": 10000000
126+
"memmap_threshold": 10000000,
127+
"max_optimization_threads": null
124128
}
125129
},
126130
"search_params": [

0 commit comments

Comments
 (0)