diff --git a/rust/lancedb/src/index.rs b/rust/lancedb/src/index.rs index c693dc056..8017c5ebe 100644 --- a/rust/lancedb/src/index.rs +++ b/rust/lancedb/src/index.rs @@ -189,6 +189,7 @@ pub struct IndexBuilder { pub(crate) index: Index, pub(crate) columns: Vec, pub(crate) replace: bool, + pub(crate) index_uuid: Option, pub(crate) wait_timeout: Option, pub(crate) train: bool, pub(crate) name: Option, @@ -201,6 +202,7 @@ impl IndexBuilder { index, columns, replace: true, + index_uuid: None, train: true, wait_timeout: None, name: None, @@ -217,6 +219,12 @@ impl IndexBuilder { self } + /// Use a caller-selected UUID for the created index. + pub fn index_uuid(mut self, uuid: uuid::Uuid) -> Self { + self.index_uuid = Some(uuid); + self + } + /// The name of the index. If not set, a default name will be generated. /// /// # Examples diff --git a/rust/lancedb/src/table/create_index.rs b/rust/lancedb/src/table/create_index.rs index c7d6b5675..b47ebf6f6 100644 --- a/rust/lancedb/src/table/create_index.rs +++ b/rust/lancedb/src/table/create_index.rs @@ -156,6 +156,9 @@ impl NativeTable { .train(opts.train) .replace(opts.replace); + if let Some(index_uuid) = opts.index_uuid { + builder = builder.index_uuid(index_uuid); + } if let Some(name) = opts.name { builder = builder.name(name); }