mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-26 14:49:57 +00:00
103 lines
2.5 KiB
TypeScript
103 lines
2.5 KiB
TypeScript
// Copyright 2024 Lance Developers.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import {
|
|
MetricType,
|
|
IndexBuilder as NativeBuilder,
|
|
Table as NativeTable,
|
|
} from "./native";
|
|
|
|
/** Options to create `IVF_PQ` index */
|
|
export interface IvfPQOptions {
|
|
/** Number of IVF partitions. */
|
|
num_partitions?: number;
|
|
|
|
/** Number of sub-vectors in PQ coding. */
|
|
num_sub_vectors?: number;
|
|
|
|
/** Number of bits used for each PQ code.
|
|
*/
|
|
num_bits?: number;
|
|
|
|
/** Metric type to calculate the distance between vectors.
|
|
*
|
|
* Supported metrics: `L2`, `Cosine` and `Dot`.
|
|
*/
|
|
metric_type?: MetricType;
|
|
|
|
/** Number of iterations to train K-means.
|
|
*
|
|
* Default is 50. The more iterations it usually yield better results,
|
|
* but it takes longer to train.
|
|
*/
|
|
max_iterations?: number;
|
|
|
|
sample_rate?: number;
|
|
}
|
|
|
|
/**
|
|
* Building an index on LanceDB {@link Table}
|
|
*
|
|
* @see {@link Table.createIndex} for detailed usage.
|
|
*/
|
|
export class IndexBuilder {
|
|
private inner: NativeBuilder;
|
|
|
|
constructor(tbl: NativeTable) {
|
|
this.inner = tbl.createIndex();
|
|
}
|
|
|
|
/** Instruct the builder to build an `IVF_PQ` index */
|
|
ivf_pq(options?: IvfPQOptions): IndexBuilder {
|
|
this.inner.ivfPq(
|
|
options?.metric_type,
|
|
options?.num_partitions,
|
|
options?.num_sub_vectors,
|
|
options?.num_bits,
|
|
options?.max_iterations,
|
|
options?.sample_rate
|
|
);
|
|
return this;
|
|
}
|
|
|
|
/** Instruct the builder to build a Scalar index. */
|
|
scalar(): IndexBuilder {
|
|
this.scalar();
|
|
return this;
|
|
}
|
|
|
|
/** Set the column(s) to create index on top of. */
|
|
column(col: string): IndexBuilder {
|
|
this.inner.column(col);
|
|
return this;
|
|
}
|
|
|
|
/** Set to true to replace existing index. */
|
|
replace(val: boolean): IndexBuilder {
|
|
this.inner.replace(val);
|
|
return this;
|
|
}
|
|
|
|
/** Specify the name of the index. Optional */
|
|
name(n: string): IndexBuilder {
|
|
this.inner.name(n);
|
|
return this;
|
|
}
|
|
|
|
/** Building the index. */
|
|
async build() {
|
|
await this.inner.build();
|
|
}
|
|
}
|