@@ -31,6 +31,7 @@ class ExplicitPartitions;
3131class GlobalIndexSettings ;
3232class VectorIndexSettings ;
3333class KMeansTreeSettings ;
34+ class FulltextIndexSettings ;
3435class PartitioningSettings ;
3536class ReadReplicasSettings ;
3637class DateTypeColumnModeSettings ;
@@ -295,6 +296,49 @@ struct TKMeansTreeSettings {
295296 void Out (IOutputStream &o) const ;
296297};
297298
299+ struct TFulltextIndexSettings {
300+ public:
301+ enum class ELayout {
302+ Unspecified = 0 ,
303+ Flat,
304+ };
305+
306+ enum class ETokenizer {
307+ Unspecified = 0 ,
308+ Whitespace,
309+ Standard,
310+ Keyword,
311+ };
312+
313+ struct TAnalyzers {
314+ std::optional<ETokenizer> Tokenizer;
315+ std::optional<std::string> Language;
316+ std::optional<bool > UseFilterLowercase;
317+ std::optional<bool > UseFilterStopwords;
318+ std::optional<bool > UseFilterNgram;
319+ std::optional<bool > UseFilterEdgeNgram;
320+ std::optional<int32_t > FilterNgramMinLength;
321+ std::optional<int32_t > FilterNgramMaxLength;
322+ std::optional<bool > UseFilterLength;
323+ std::optional<int32_t > FilterLengthMin;
324+ std::optional<int32_t > FilterLengthMax;
325+ };
326+
327+ struct TColumnAnalyzers {
328+ std::optional<std::string> Column;
329+ std::optional<TAnalyzers> Analyzers;
330+ };
331+
332+ std::optional<ELayout> Layout;
333+ std::vector<TColumnAnalyzers> Columns;
334+
335+ static TFulltextIndexSettings FromProto (const Ydb::Table::FulltextIndexSettings& proto);
336+
337+ void SerializeTo (Ydb::Table::FulltextIndexSettings& settings) const ;
338+
339+ void Out (IOutputStream& o) const ;
340+ };
341+
298342// ! Represents index description
299343class TIndexDescription {
300344 friend class NYdb ::TProtoAccessor;
@@ -306,7 +350,7 @@ class TIndexDescription {
306350 const std::vector<std::string>& indexColumns,
307351 const std::vector<std::string>& dataColumns = {},
308352 const std::vector<TGlobalIndexSettings>& globalIndexSettings = {},
309- const std::variant<std::monostate, TKMeansTreeSettings>& specializedIndexSettings = {}
353+ const std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings >& specializedIndexSettings = {}
310354 );
311355
312356 TIndexDescription (
@@ -320,7 +364,7 @@ class TIndexDescription {
320364 EIndexType GetIndexType () const ;
321365 const std::vector<std::string>& GetIndexColumns () const ;
322366 const std::vector<std::string>& GetDataColumns () const ;
323- const std::variant<std::monostate, TKMeansTreeSettings>& GetIndexSettings () const ;
367+ const std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings >& GetIndexSettings () const ;
324368 uint64_t GetSizeBytes () const ;
325369
326370 void SerializeTo (Ydb::Table::TableIndex& proto) const ;
@@ -340,7 +384,7 @@ class TIndexDescription {
340384 std::vector<std::string> IndexColumns_;
341385 std::vector<std::string> DataColumns_;
342386 std::vector<TGlobalIndexSettings> GlobalIndexSettings_;
343- std::variant<std::monostate, TKMeansTreeSettings> SpecializedIndexSettings_;
387+ std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings > SpecializedIndexSettings_;
344388 uint64_t SizeBytes_ = 0 ;
345389};
346390
@@ -755,6 +799,9 @@ class TTableDescription {
755799 // vector KMeansTree
756800 void AddVectorKMeansTreeIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TKMeansTreeSettings& indexSettings);
757801 void AddVectorKMeansTreeIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TKMeansTreeSettings& indexSettings);
802+ // fulltext
803+ void AddFulltextIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TFulltextIndexSettings& indexSettings);
804+ void AddFulltextIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TFulltextIndexSettings& indexSettings);
758805
759806 // default
760807 void AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
@@ -996,6 +1043,10 @@ class TTableBuilder {
9961043 TTableBuilder& AddVectorKMeansTreeIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TKMeansTreeSettings& indexSettings);
9971044 TTableBuilder& AddVectorKMeansTreeIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TKMeansTreeSettings& indexSettings);
9981045
1046+ // fulltext
1047+ TTableBuilder& AddFulltextIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const TFulltextIndexSettings& indexSettings);
1048+ TTableBuilder& AddFulltextIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TFulltextIndexSettings& indexSettings);
1049+
9991050 // default
10001051 TTableBuilder& AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns);
10011052 TTableBuilder& AddSecondaryIndex (const std::string& indexName, const std::vector<std::string>& indexColumns);
0 commit comments