@@ -23,6 +23,7 @@ class ChangefeedDescription;
23
23
class DescribeTableResult ;
24
24
class ExplicitPartitions ;
25
25
class GlobalIndexSettings ;
26
+ class VectorIndexSettings ;
26
27
class PartitioningSettings ;
27
28
class DateTypeColumnModeSettings ;
28
29
class TtlSettings ;
@@ -190,6 +191,45 @@ struct TGlobalIndexSettings {
190
191
void SerializeTo (Ydb::Table::GlobalIndexSettings& proto) const ;
191
192
};
192
193
194
+ struct TVectorIndexSettings {
195
+ public:
196
+ enum class EDistance {
197
+ Cosine,
198
+ Manhattan,
199
+ Euclidean,
200
+
201
+ Unknown = std::numeric_limits<int >::max()
202
+ };
203
+
204
+ enum class ESimilarity {
205
+ Cosine,
206
+ InnerProduct,
207
+
208
+ Unknown = std::numeric_limits<int >::max()
209
+ };
210
+
211
+ enum class EVectorType {
212
+ Float,
213
+ Uint8,
214
+ Int8,
215
+ Bit,
216
+
217
+ Unknown = std::numeric_limits<int >::max()
218
+ };
219
+ using TMetric = std::variant<std::monostate, EDistance, ESimilarity>;
220
+
221
+ TMetric Metric;
222
+ EVectorType VectorType;
223
+ uint32_t VectorDimension;
224
+
225
+ template <typename TProto>
226
+ static TVectorIndexSettings FromProto (const TProto& proto);
227
+
228
+ void SerializeTo (Ydb::Table::VectorIndexSettings& settings) const ;
229
+
230
+ void Out (IOutputStream &o) const ;
231
+ };
232
+
193
233
// ! Represents index description
194
234
class TIndexDescription {
195
235
friend class NYdb ::TProtoAccessor;
@@ -200,20 +240,22 @@ class TIndexDescription {
200
240
EIndexType type,
201
241
const std::vector<std::string>& indexColumns,
202
242
const std::vector<std::string>& dataColumns = {},
203
- const TGlobalIndexSettings& settings = {}
243
+ const std::vector<TGlobalIndexSettings>& globalIndexSettings = {},
244
+ const std::optional<TVectorIndexSettings>& vectorIndexSettings = {}
204
245
);
205
246
206
247
TIndexDescription (
207
248
const std::string& name,
208
249
const std::vector<std::string>& indexColumns,
209
250
const std::vector<std::string>& dataColumns = {},
210
- const TGlobalIndexSettings& settings = {}
251
+ const std::vector< TGlobalIndexSettings>& globalIndexSettings = {}
211
252
);
212
253
213
254
const std::string& GetIndexName () const ;
214
255
EIndexType GetIndexType () const ;
215
256
const std::vector<std::string>& GetIndexColumns () const ;
216
257
const std::vector<std::string>& GetDataColumns () const ;
258
+ const std::optional<TVectorIndexSettings>& GetVectorIndexSettings () const ;
217
259
uint64_t GetSizeBytes () const ;
218
260
219
261
void SerializeTo (Ydb::Table::TableIndex& proto) const ;
@@ -232,7 +274,8 @@ class TIndexDescription {
232
274
EIndexType IndexType_;
233
275
std::vector<std::string> IndexColumns_;
234
276
std::vector<std::string> DataColumns_;
235
- TGlobalIndexSettings GlobalIndexSettings_;
277
+ std::vector<TGlobalIndexSettings> GlobalIndexSettings_;
278
+ std::optional<TVectorIndexSettings> VectorIndexSettings_;
236
279
uint64_t SizeBytes = 0 ;
237
280
};
238
281
@@ -606,6 +649,9 @@ class TTableDescription {
606
649
// unique
607
650
void AddUniqueSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
608
651
void AddUniqueSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns);
652
+ // vector KMeansTree
653
+ void AddVectorKMeansTreeSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TVectorIndexSettings& vectorIndexSettings);
654
+ void AddVectorKMeansTreeSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TVectorIndexSettings& vectorIndexSettings);
609
655
610
656
// default
611
657
void AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
@@ -825,6 +871,10 @@ class TTableBuilder {
825
871
TTableBuilder& AddUniqueSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
826
872
TTableBuilder& AddUniqueSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns);
827
873
874
+ // vector KMeansTree
875
+ TTableBuilder& AddVectorKMeansTreeSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TVectorIndexSettings& vectorIndexSettings);
876
+ TTableBuilder& AddVectorKMeansTreeSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TVectorIndexSettings& vectorIndexSettings);
877
+
828
878
// default
829
879
TTableBuilder& AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns);
830
880
TTableBuilder& AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
0 commit comments