mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-23 13:29:57 +00:00
Compare commits
82 Commits
python-v0.
...
python-v0.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
072adc41aa | ||
|
|
c6f25ef1f0 | ||
|
|
2f0c5baea2 | ||
|
|
a63dd66d41 | ||
|
|
d6b3ccb37b | ||
|
|
c4f99e82e5 | ||
|
|
979a2d3d9d | ||
|
|
7ac5f74c80 | ||
|
|
ecdee4d2b1 | ||
|
|
f391ed828a | ||
|
|
a99a450f2b | ||
|
|
6fa1f37506 | ||
|
|
544382df5e | ||
|
|
784f00ef6d | ||
|
|
96d7446f70 | ||
|
|
99ea78fb55 | ||
|
|
8eef4cdc28 | ||
|
|
0f102f02c3 | ||
|
|
a33a0670f6 | ||
|
|
14c9ff46d1 | ||
|
|
1865f7decf | ||
|
|
a608621476 | ||
|
|
00514999ff | ||
|
|
b3b597fef6 | ||
|
|
bf17144591 | ||
|
|
09e110525f | ||
|
|
40f0dbb64d | ||
|
|
3b19e96ae7 | ||
|
|
78a17ad54c | ||
|
|
a8e6b491e2 | ||
|
|
cea541ca46 | ||
|
|
873ffc1042 | ||
|
|
83273ad997 | ||
|
|
d18d63c69d | ||
|
|
c3e865e8d0 | ||
|
|
a7755cb313 | ||
|
|
3490f3456f | ||
|
|
0a1d0693e1 | ||
|
|
fd330b4b4b | ||
|
|
d4e9fc08e0 | ||
|
|
3626f2f5e1 | ||
|
|
e64712cfa5 | ||
|
|
3e3118f85c | ||
|
|
592598a333 | ||
|
|
5ad21341c9 | ||
|
|
6e08caa091 | ||
|
|
7e259d8b0f | ||
|
|
e84f747464 | ||
|
|
998cd43fe6 | ||
|
|
4bc7eebe61 | ||
|
|
2e3b34e79b | ||
|
|
e7574698eb | ||
|
|
801a9e5f6f | ||
|
|
4e5fbe6c99 | ||
|
|
1a449fa49e | ||
|
|
6bf742c759 | ||
|
|
ef3093bc23 | ||
|
|
16851389ea | ||
|
|
c269524b2f | ||
|
|
f6eef14313 | ||
|
|
32716adaa3 | ||
|
|
5e98b7f4c0 | ||
|
|
3f2589c11f | ||
|
|
e3b99694d6 | ||
|
|
9d42dc349c | ||
|
|
482f1ee1d3 | ||
|
|
2f39274a66 | ||
|
|
2fc174f532 | ||
|
|
dba85f4d6f | ||
|
|
555fa26147 | ||
|
|
e05c0cd87e | ||
|
|
25c17ebf4e | ||
|
|
87b12b57dc | ||
|
|
3dc9b71914 | ||
|
|
2622f34d1a | ||
|
|
a677a4b651 | ||
|
|
e6b4f14c1f | ||
|
|
15f8f4d627 | ||
|
|
6526d6c3b1 | ||
|
|
da4d7e3ca7 | ||
|
|
8fbadca9aa | ||
|
|
29120219cf |
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "0.15.1-beta.0"
|
current_version = "0.16.1-beta.3"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<major>0|[1-9]\\d*)\\.
|
(?P<major>0|[1-9]\\d*)\\.
|
||||||
(?P<minor>0|[1-9]\\d*)\\.
|
(?P<minor>0|[1-9]\\d*)\\.
|
||||||
|
|||||||
31
.github/workflows/license-header-check.yml
vendored
Normal file
31
.github/workflows/license-header-check.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Check license headers
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- rust/**
|
||||||
|
- python/**
|
||||||
|
- nodejs/**
|
||||||
|
- java/**
|
||||||
|
- .github/workflows/license-header-check.yml
|
||||||
|
jobs:
|
||||||
|
check-licenses:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Install license-header-checker
|
||||||
|
working-directory: /tmp
|
||||||
|
run: |
|
||||||
|
curl -s https://raw.githubusercontent.com/lluissm/license-header-checker/master/install.sh | bash
|
||||||
|
mv /tmp/bin/license-header-checker /usr/local/bin/
|
||||||
|
- name: Check license headers (rust)
|
||||||
|
run: license-header-checker -a -v ./rust/license_header.txt ./ rs && [[ -z `git status -s` ]]
|
||||||
|
- name: Check license headers (python)
|
||||||
|
run: license-header-checker -a -v ./python/license_header.txt python py && [[ -z `git status -s` ]]
|
||||||
|
- name: Check license headers (typescript)
|
||||||
|
run: license-header-checker -a -v ./nodejs/license_header.txt nodejs ts && [[ -z `git status -s` ]]
|
||||||
|
- name: Check license headers (java)
|
||||||
|
run: license-header-checker -a -v ./nodejs/license_header.txt java java && [[ -z `git status -s` ]]
|
||||||
12
.github/workflows/nodejs.yml
vendored
12
.github/workflows/nodejs.yml
vendored
@@ -106,6 +106,18 @@ jobs:
|
|||||||
python ci/mock_openai.py &
|
python ci/mock_openai.py &
|
||||||
cd nodejs/examples
|
cd nodejs/examples
|
||||||
npm test
|
npm test
|
||||||
|
- name: Check docs
|
||||||
|
run: |
|
||||||
|
# We run this as part of the job because the binary needs to be built
|
||||||
|
# first to export the types of the native code.
|
||||||
|
set -e
|
||||||
|
npm ci
|
||||||
|
npm run docs
|
||||||
|
if ! git diff --exit-code; then
|
||||||
|
echo "Docs need to be updated"
|
||||||
|
echo "Run 'npm run docs', fix any warnings, and commit the changes."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
macos:
|
macos:
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
runs-on: "macos-14"
|
runs-on: "macos-14"
|
||||||
|
|||||||
87
.github/workflows/rust.yml
vendored
87
.github/workflows/rust.yml
vendored
@@ -22,6 +22,7 @@ env:
|
|||||||
# "1" means line tables only, which is useful for panic tracebacks.
|
# "1" means line tables only, which is useful for panic tracebacks.
|
||||||
RUSTFLAGS: "-C debuginfo=1"
|
RUSTFLAGS: "-C debuginfo=1"
|
||||||
RUST_BACKTRACE: "1"
|
RUST_BACKTRACE: "1"
|
||||||
|
CARGO_INCREMENTAL: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -51,6 +52,33 @@ jobs:
|
|||||||
- name: Run clippy
|
- name: Run clippy
|
||||||
run: cargo clippy --workspace --tests --all-features -- -D warnings
|
run: cargo clippy --workspace --tests --all-features -- -D warnings
|
||||||
|
|
||||||
|
build-no-lock:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
timeout-minutes: 30
|
||||||
|
env:
|
||||||
|
# Need up-to-date compilers for kernels
|
||||||
|
CC: clang
|
||||||
|
CXX: clang++
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
# Building without a lock file often requires the latest Rust version since downstream
|
||||||
|
# dependencies may have updated their minimum Rust version.
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: "stable"
|
||||||
|
# Remove cargo.lock to force a fresh build
|
||||||
|
- name: Remove Cargo.lock
|
||||||
|
run: rm -f Cargo.lock
|
||||||
|
- uses: rui314/setup-mold@v1
|
||||||
|
- uses: Swatinem/rust-cache@v2
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y protobuf-compiler libssl-dev
|
||||||
|
- name: Build all
|
||||||
|
run: |
|
||||||
|
cargo build --benches --all-features --tests
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
# To build all features, we need more disk space than is available
|
# To build all features, we need more disk space than is available
|
||||||
@@ -75,8 +103,11 @@ jobs:
|
|||||||
workspaces: rust
|
workspaces: rust
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
# This shaves 2 minutes off this step in CI. This doesn't seem to be
|
||||||
|
# necessary in standard runners, but it is in the 4x runners.
|
||||||
|
sudo rm /var/lib/man-db/auto-update
|
||||||
sudo apt install -y protobuf-compiler libssl-dev
|
sudo apt install -y protobuf-compiler libssl-dev
|
||||||
|
- uses: rui314/setup-mold@v1
|
||||||
- name: Make Swap
|
- name: Make Swap
|
||||||
run: |
|
run: |
|
||||||
sudo fallocate -l 16G /swapfile
|
sudo fallocate -l 16G /swapfile
|
||||||
@@ -87,11 +118,11 @@ jobs:
|
|||||||
working-directory: .
|
working-directory: .
|
||||||
run: docker compose up --detach --wait
|
run: docker compose up --detach --wait
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cargo build --all-features
|
run: cargo build --all-features --tests --locked --examples
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: cargo test --all-features
|
run: cargo test --all-features --locked
|
||||||
- name: Run examples
|
- name: Run examples
|
||||||
run: cargo run --example simple
|
run: cargo run --example simple --locked
|
||||||
|
|
||||||
macos:
|
macos:
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
@@ -115,11 +146,14 @@ jobs:
|
|||||||
workspaces: rust
|
workspaces: rust
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: brew install protobuf
|
run: brew install protobuf
|
||||||
- name: Build
|
|
||||||
run: cargo build --all-features
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
# Run with everything except the integration tests.
|
run: |
|
||||||
run: cargo test --features remote,fp16kernels
|
# Don't run the s3 integration tests since docker isn't available
|
||||||
|
# on this image.
|
||||||
|
ALL_FEATURES=`cargo metadata --format-version=1 --no-deps \
|
||||||
|
| jq -r '.packages[] | .features | keys | .[]' \
|
||||||
|
| grep -v s3-test | sort | uniq | paste -s -d "," -`
|
||||||
|
cargo test --features $ALL_FEATURES --locked
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
@@ -140,8 +174,38 @@ jobs:
|
|||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: |
|
run: |
|
||||||
$env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT
|
$env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT
|
||||||
cargo build
|
cargo test --features remote --locked
|
||||||
cargo test
|
|
||||||
|
windows-arm64-cross:
|
||||||
|
# We cross compile in Node releases, so we want to make sure
|
||||||
|
# this can run successfully.
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: alpine:edge
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed
|
||||||
|
|
||||||
|
curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y
|
||||||
|
source $HOME/.cargo/env
|
||||||
|
rustup target add aarch64-pc-windows-msvc
|
||||||
|
|
||||||
|
mkdir -p sysroot
|
||||||
|
cd sysroot
|
||||||
|
sh ../ci/sysroot-aarch64-pc-windows-msvc.sh
|
||||||
|
- name: Check
|
||||||
|
env:
|
||||||
|
CC: clang
|
||||||
|
AR: llvm-ar
|
||||||
|
C_INCLUDE_PATH: /usr/aarch64-pc-windows-msvc/usr/include
|
||||||
|
CARGO_BUILD_TARGET: aarch64-pc-windows-msvc
|
||||||
|
RUSTFLAGS: -Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib
|
||||||
|
run: |
|
||||||
|
source $HOME/.cargo/env
|
||||||
|
cargo check --features remote --locked
|
||||||
|
|
||||||
windows-arm64:
|
windows-arm64:
|
||||||
runs-on: windows-4x-arm
|
runs-on: windows-4x-arm
|
||||||
@@ -236,8 +300,7 @@ jobs:
|
|||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: |
|
run: |
|
||||||
$env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT
|
$env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT
|
||||||
cargo build --target aarch64-pc-windows-msvc
|
cargo test --target aarch64-pc-windows-msvc --features remote --locked
|
||||||
cargo test --target aarch64-pc-windows-msvc
|
|
||||||
|
|
||||||
msrv:
|
msrv:
|
||||||
# Check the minimum supported Rust version
|
# Check the minimum supported Rust version
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,7 +9,6 @@ venv
|
|||||||
.vscode
|
.vscode
|
||||||
.zed
|
.zed
|
||||||
rust/target
|
rust/target
|
||||||
rust/Cargo.lock
|
|
||||||
|
|
||||||
site
|
site
|
||||||
|
|
||||||
@@ -42,5 +41,3 @@ dist
|
|||||||
target
|
target
|
||||||
|
|
||||||
**/sccache.log
|
**/sccache.log
|
||||||
|
|
||||||
Cargo.lock
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ repos:
|
|||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
# Ruff version.
|
# Ruff version.
|
||||||
rev: v0.2.2
|
rev: v0.8.4
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
- repo: local
|
- repo: local
|
||||||
|
|||||||
8180
Cargo.lock
generated
Normal file
8180
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
42
Cargo.toml
42
Cargo.toml
@@ -21,16 +21,14 @@ categories = ["database-implementations"]
|
|||||||
rust-version = "1.78.0"
|
rust-version = "1.78.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
lance = { "version" = "=0.23.0", "features" = [
|
lance = { "version" = "=0.23.2", "features" = ["dynamodb"] }
|
||||||
"dynamodb",
|
lance-io = { version = "=0.23.2" }
|
||||||
], git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-index = { version = "=0.23.2" }
|
||||||
lance-io = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-linalg = { version = "=0.23.2" }
|
||||||
lance-index = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-table = { version = "=0.23.2" }
|
||||||
lance-linalg = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-testing = { version = "=0.23.2" }
|
||||||
lance-table = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-datafusion = { version = "=0.23.2" }
|
||||||
lance-testing = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
lance-encoding = { version = "=0.23.2" }
|
||||||
lance-datafusion = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
|
||||||
lance-encoding = { version = "=0.23.0", git = "https://github.com/lancedb/lance.git", tag = "v0.23.0-beta.3" }
|
|
||||||
# Note that this one does not include pyarrow
|
# Note that this one does not include pyarrow
|
||||||
arrow = { version = "53.2", optional = false }
|
arrow = { version = "53.2", optional = false }
|
||||||
arrow-array = "53.2"
|
arrow-array = "53.2"
|
||||||
@@ -41,21 +39,33 @@ arrow-schema = "53.2"
|
|||||||
arrow-arith = "53.2"
|
arrow-arith = "53.2"
|
||||||
arrow-cast = "53.2"
|
arrow-cast = "53.2"
|
||||||
async-trait = "0"
|
async-trait = "0"
|
||||||
chrono = "0.4.35"
|
datafusion = { version = "44.0", default-features = false }
|
||||||
datafusion-common = "44.0"
|
datafusion-catalog = "44.0"
|
||||||
|
datafusion-common = { version = "44.0", default-features = false }
|
||||||
|
datafusion-execution = "44.0"
|
||||||
|
datafusion-expr = "44.0"
|
||||||
datafusion-physical-plan = "44.0"
|
datafusion-physical-plan = "44.0"
|
||||||
env_logger = "0.10"
|
env_logger = "0.11"
|
||||||
half = { "version" = "=2.4.1", default-features = false, features = [
|
half = { "version" = "=2.4.1", default-features = false, features = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
] }
|
] }
|
||||||
futures = "0"
|
futures = "0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
moka = { version = "0.11", features = ["future"] }
|
moka = { version = "0.12", features = ["future"] }
|
||||||
object_store = "0.10.2"
|
object_store = "0.11.0"
|
||||||
pin-project = "1.0.7"
|
pin-project = "1.0.7"
|
||||||
snafu = "0.7.4"
|
snafu = "0.8"
|
||||||
url = "2"
|
url = "2"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
regex = "1.10"
|
regex = "1.10"
|
||||||
lazy_static = "1"
|
lazy_static = "1"
|
||||||
|
|
||||||
|
# Temporary pins to work around downstream issues
|
||||||
|
# https://github.com/apache/arrow-rs/commit/2fddf85afcd20110ce783ed5b4cdeb82293da30b
|
||||||
|
chrono = "=0.4.39"
|
||||||
|
# https://github.com/RustCrypto/formats/issues/1684
|
||||||
|
base64ct = "=1.6.0"
|
||||||
|
|
||||||
|
# Workaround for: https://github.com/eira-fransham/crunchy/issues/13
|
||||||
|
crunchy = "=0.2.2"
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ repo_url: https://github.com/lancedb/lancedb
|
|||||||
edit_uri: https://github.com/lancedb/lancedb/tree/main/docs/src
|
edit_uri: https://github.com/lancedb/lancedb/tree/main/docs/src
|
||||||
repo_name: lancedb/lancedb
|
repo_name: lancedb/lancedb
|
||||||
docs_dir: src
|
docs_dir: src
|
||||||
|
watch:
|
||||||
|
- src
|
||||||
|
- ../python/python
|
||||||
|
|
||||||
theme:
|
theme:
|
||||||
name: "material"
|
name: "material"
|
||||||
@@ -63,6 +66,7 @@ plugins:
|
|||||||
- https://arrow.apache.org/docs/objects.inv
|
- https://arrow.apache.org/docs/objects.inv
|
||||||
- https://pandas.pydata.org/docs/objects.inv
|
- https://pandas.pydata.org/docs/objects.inv
|
||||||
- https://lancedb.github.io/lance/objects.inv
|
- https://lancedb.github.io/lance/objects.inv
|
||||||
|
- https://docs.pydantic.dev/latest/objects.inv
|
||||||
- mkdocs-jupyter
|
- mkdocs-jupyter
|
||||||
- render_swagger:
|
- render_swagger:
|
||||||
allow_arbitrary_locations: true
|
allow_arbitrary_locations: true
|
||||||
@@ -178,6 +182,7 @@ nav:
|
|||||||
- Imagebind embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/imagebind_embedding.md
|
- Imagebind embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/imagebind_embedding.md
|
||||||
- Jina Embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/jina_multimodal_embedding.md
|
- Jina Embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/jina_multimodal_embedding.md
|
||||||
- User-defined embedding functions: embeddings/custom_embedding_function.md
|
- User-defined embedding functions: embeddings/custom_embedding_function.md
|
||||||
|
- Variables and secrets: embeddings/variables_and_secrets.md
|
||||||
- "Example: Multi-lingual semantic search": notebooks/multi_lingual_example.ipynb
|
- "Example: Multi-lingual semantic search": notebooks/multi_lingual_example.ipynb
|
||||||
- "Example: MultiModal CLIP Embeddings": notebooks/DisappearingEmbeddingFunction.ipynb
|
- "Example: MultiModal CLIP Embeddings": notebooks/DisappearingEmbeddingFunction.ipynb
|
||||||
- 🔌 Integrations:
|
- 🔌 Integrations:
|
||||||
@@ -311,6 +316,7 @@ nav:
|
|||||||
- Imagebind embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/imagebind_embedding.md
|
- Imagebind embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/imagebind_embedding.md
|
||||||
- Jina Embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/jina_multimodal_embedding.md
|
- Jina Embeddings: embeddings/available_embedding_models/multimodal_embedding_functions/jina_multimodal_embedding.md
|
||||||
- User-defined embedding functions: embeddings/custom_embedding_function.md
|
- User-defined embedding functions: embeddings/custom_embedding_function.md
|
||||||
|
- Variables and secrets: embeddings/variables_and_secrets.md
|
||||||
- "Example: Multi-lingual semantic search": notebooks/multi_lingual_example.ipynb
|
- "Example: Multi-lingual semantic search": notebooks/multi_lingual_example.ipynb
|
||||||
- "Example: MultiModal CLIP Embeddings": notebooks/DisappearingEmbeddingFunction.ipynb
|
- "Example: MultiModal CLIP Embeddings": notebooks/DisappearingEmbeddingFunction.ipynb
|
||||||
- Integrations:
|
- Integrations:
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ components:
|
|||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
index_name:
|
||||||
|
name: index_name
|
||||||
|
in: path
|
||||||
|
description: name of the index
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
responses:
|
responses:
|
||||||
invalid_request:
|
invalid_request:
|
||||||
description: Invalid request
|
description: Invalid request
|
||||||
@@ -485,3 +492,22 @@ paths:
|
|||||||
$ref: "#/components/responses/unauthorized"
|
$ref: "#/components/responses/unauthorized"
|
||||||
"404":
|
"404":
|
||||||
$ref: "#/components/responses/not_found"
|
$ref: "#/components/responses/not_found"
|
||||||
|
/v1/table/{name}/index/{index_name}/drop/:
|
||||||
|
post:
|
||||||
|
description: Drop an index from the table
|
||||||
|
tags:
|
||||||
|
- Tables
|
||||||
|
summary: Drop an index from the table
|
||||||
|
operationId: dropIndex
|
||||||
|
parameters:
|
||||||
|
- $ref: "#/components/parameters/table_name"
|
||||||
|
- $ref: "#/components/parameters/index_name"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: Index successfully dropped
|
||||||
|
"400":
|
||||||
|
$ref: "#/components/responses/invalid_request"
|
||||||
|
"401":
|
||||||
|
$ref: "#/components/responses/unauthorized"
|
||||||
|
"404":
|
||||||
|
$ref: "#/components/responses/not_found"
|
||||||
@@ -3,6 +3,7 @@ import * as vectordb from "vectordb";
|
|||||||
// --8<-- [end:import]
|
// --8<-- [end:import]
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
|
console.log("ann_indexes.ts: start");
|
||||||
// --8<-- [start:ingest]
|
// --8<-- [start:ingest]
|
||||||
const db = await vectordb.connect("data/sample-lancedb");
|
const db = await vectordb.connect("data/sample-lancedb");
|
||||||
|
|
||||||
@@ -49,5 +50,5 @@ import * as vectordb from "vectordb";
|
|||||||
.execute();
|
.execute();
|
||||||
// --8<-- [end:search3]
|
// --8<-- [end:search3]
|
||||||
|
|
||||||
console.log("Ann indexes: done");
|
console.log("ann_indexes.ts: done");
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -133,11 +133,20 @@ recommend switching to stable releases.
|
|||||||
## Connect to a database
|
## Connect to a database
|
||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:imports"
|
--8<-- "python/python/tests/docs/test_basic.py:imports"
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:connect"
|
|
||||||
|
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:set_uri"
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:connect"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:imports"
|
||||||
|
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:set_uri"
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:connect_async"
|
--8<-- "python/python/tests/docs/test_basic.py:connect_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -183,19 +192,31 @@ table.
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
```python
|
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_table"
|
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_table_async"
|
|
||||||
```
|
|
||||||
|
|
||||||
If the table already exists, LanceDB will raise an error by default.
|
If the table already exists, LanceDB will raise an error by default.
|
||||||
If you want to overwrite the table, you can pass in `mode="overwrite"`
|
If you want to overwrite the table, you can pass in `mode="overwrite"`
|
||||||
to the `create_table` method.
|
to the `create_table` method.
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:create_table"
|
||||||
|
```
|
||||||
|
|
||||||
You can also pass in a pandas DataFrame directly:
|
You can also pass in a pandas DataFrame directly:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_table_pandas"
|
--8<-- "python/python/tests/docs/test_basic.py:create_table_pandas"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_basic.py:create_table_async"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also pass in a pandas DataFrame directly:
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_table_async_pandas"
|
--8<-- "python/python/tests/docs/test_basic.py:create_table_async_pandas"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -247,8 +268,14 @@ similar to a `CREATE TABLE` statement in SQL.
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_empty_table"
|
--8<-- "python/python/tests/docs/test_basic.py:create_empty_table"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_empty_table_async"
|
--8<-- "python/python/tests/docs/test_basic.py:create_empty_table_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -281,8 +308,14 @@ Once created, you can open a table as follows:
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:open_table"
|
--8<-- "python/python/tests/docs/test_basic.py:open_table"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:open_table_async"
|
--8<-- "python/python/tests/docs/test_basic.py:open_table_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -310,8 +343,14 @@ If you forget the name of your table, you can always get a listing of all table
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:table_names"
|
--8<-- "python/python/tests/docs/test_basic.py:table_names"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:table_names_async"
|
--8<-- "python/python/tests/docs/test_basic.py:table_names_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -340,8 +379,14 @@ After a table has been created, you can always add more data to it as follows:
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:add_data"
|
--8<-- "python/python/tests/docs/test_basic.py:add_data"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:add_data_async"
|
--8<-- "python/python/tests/docs/test_basic.py:add_data_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -370,8 +415,14 @@ Once you've embedded the query, you can find its nearest neighbors as follows:
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:vector_search"
|
--8<-- "python/python/tests/docs/test_basic.py:vector_search"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:vector_search_async"
|
--8<-- "python/python/tests/docs/test_basic.py:vector_search_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -412,8 +463,14 @@ LanceDB allows you to create an ANN index on a table as follows:
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
```py
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_index"
|
--8<-- "python/python/tests/docs/test_basic.py:create_index"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:create_index_async"
|
--8<-- "python/python/tests/docs/test_basic.py:create_index_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -451,8 +508,14 @@ This can delete any number of rows that match the filter.
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:delete_rows"
|
--8<-- "python/python/tests/docs/test_basic.py:delete_rows"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:delete_rows_async"
|
--8<-- "python/python/tests/docs/test_basic.py:delete_rows_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -483,7 +546,10 @@ simple or complex as needed. To see what expressions are supported, see the
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
Read more: [lancedb.table.Table.delete][]
|
Read more: [lancedb.table.Table.delete][]
|
||||||
|
=== "Async API"
|
||||||
|
Read more: [lancedb.table.AsyncTable.delete][]
|
||||||
|
|
||||||
=== "Typescript[^1]"
|
=== "Typescript[^1]"
|
||||||
|
|
||||||
@@ -505,8 +571,14 @@ Use the `drop_table()` method on the database to remove a table.
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:drop_table"
|
--8<-- "python/python/tests/docs/test_basic.py:drop_table"
|
||||||
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_basic.py:drop_table_async"
|
--8<-- "python/python/tests/docs/test_basic.py:drop_table_async"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -543,10 +615,17 @@ You can use the embedding API when working with embedding models. It automatical
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_embeddings_optional.py:imports"
|
--8<-- "python/python/tests/docs/test_embeddings_optional.py:imports"
|
||||||
|
|
||||||
--8<-- "python/python/tests/docs/test_embeddings_optional.py:openai_embeddings"
|
--8<-- "python/python/tests/docs/test_embeddings_optional.py:openai_embeddings"
|
||||||
```
|
```
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
Coming soon to the async API.
|
||||||
|
https://github.com/lancedb/lancedb/issues/1938
|
||||||
|
|
||||||
=== "Typescript[^1]"
|
=== "Typescript[^1]"
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ const example = async () => {
|
|||||||
// --8<-- [start:search]
|
// --8<-- [start:search]
|
||||||
const query = await tbl.search([100, 100]).limit(2).execute();
|
const query = await tbl.search([100, 100]).limit(2).execute();
|
||||||
// --8<-- [end:search]
|
// --8<-- [end:search]
|
||||||
console.log(query);
|
|
||||||
|
|
||||||
// --8<-- [start:delete]
|
// --8<-- [start:delete]
|
||||||
await tbl.delete('item = "fizz"');
|
await tbl.delete('item = "fizz"');
|
||||||
@@ -119,8 +118,9 @@ const example = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
console.log("basic_legacy.ts: start");
|
||||||
await example();
|
await example();
|
||||||
console.log("Basic example: done");
|
console.log("basic_legacy.ts: done");
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|||||||
@@ -55,6 +55,14 @@ Let's implement `SentenceTransformerEmbeddings` class. All you need to do is imp
|
|||||||
|
|
||||||
This is a stripped down version of our implementation of `SentenceTransformerEmbeddings` that removes certain optimizations and default settings.
|
This is a stripped down version of our implementation of `SentenceTransformerEmbeddings` that removes certain optimizations and default settings.
|
||||||
|
|
||||||
|
!!! danger "Use sensitive keys to prevent leaking secrets"
|
||||||
|
To prevent leaking secrets, such as API keys, you should add any sensitive
|
||||||
|
parameters of an embedding function to the output of the
|
||||||
|
[sensitive_keys()][lancedb.embeddings.base.EmbeddingFunction.sensitive_keys] /
|
||||||
|
[getSensitiveKeys()](../../js/namespaces/embedding/classes/EmbeddingFunction/#getsensitivekeys)
|
||||||
|
method. This prevents users from accidentally instantiating the embedding
|
||||||
|
function with hard-coded secrets.
|
||||||
|
|
||||||
Now you can use this embedding function to create your table schema and that's it! you can then ingest data and run queries without manually vectorizing the inputs.
|
Now you can use this embedding function to create your table schema and that's it! you can then ingest data and run queries without manually vectorizing the inputs.
|
||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|||||||
53
docs/src/embeddings/variables_and_secrets.md
Normal file
53
docs/src/embeddings/variables_and_secrets.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Variable and Secrets
|
||||||
|
|
||||||
|
Most embedding configuration options are saved in the table's metadata. However,
|
||||||
|
this isn't always appropriate. For example, API keys should never be stored in the
|
||||||
|
metadata. Additionally, other configuration options might be best set at runtime,
|
||||||
|
such as the `device` configuration that controls whether to use GPU or CPU for
|
||||||
|
inference. If you hardcoded this to GPU, you wouldn't be able to run the code on
|
||||||
|
a server without one.
|
||||||
|
|
||||||
|
To handle these cases, you can set variables on the embedding registry and
|
||||||
|
reference them in the embedding configuration. These variables will be available
|
||||||
|
during the runtime of your program, but not saved in the table's metadata. When
|
||||||
|
the table is loaded from a different process, the variables must be set again.
|
||||||
|
|
||||||
|
To set a variable, use the `set_var()` / `setVar()` method on the embedding registry.
|
||||||
|
To reference a variable, use the syntax `$env:VARIABLE_NAME`. If there is a default
|
||||||
|
value, you can use the syntax `$env:VARIABLE_NAME:DEFAULT_VALUE`.
|
||||||
|
|
||||||
|
## Using variables to set secrets
|
||||||
|
|
||||||
|
Sensitive configuration, such as API keys, must either be set as environment
|
||||||
|
variables or using variables on the embedding registry. If you pass in a hardcoded
|
||||||
|
value, LanceDB will raise an error. Instead, if you want to set an API key via
|
||||||
|
configuration, use a variable:
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_embeddings_optional.py:register_secret"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Typescript"
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
--8<-- "nodejs/examples/embedding.test.ts:register_secret"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using variables to set the device parameter
|
||||||
|
|
||||||
|
Many embedding functions that run locally have a `device` parameter that controls
|
||||||
|
whether to use GPU or CPU for inference. Because not all computers have a GPU,
|
||||||
|
it's helpful to be able to set the `device` parameter at runtime, rather than
|
||||||
|
have it hard coded in the embedding configuration. To make it work even if the
|
||||||
|
variable isn't set, you could provide a default value of `cpu` in the embedding
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
Some embedding libraries even have a method to detect which devices are available,
|
||||||
|
which could be used to dynamically set the device at runtime. For example, in Python
|
||||||
|
you can check if a CUDA GPU is available using `torch.cuda.is_available()`.
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_embeddings_optional.py:register_device"
|
||||||
|
```
|
||||||
@@ -601,6 +601,38 @@ After a table has been created, you can always add more data to it using the `ad
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Upserting into a table
|
||||||
|
|
||||||
|
Upserting lets you insert new rows or update existing rows in a table. To upsert
|
||||||
|
in LanceDB, use the merge insert API.
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:upsert_basic"
|
||||||
|
```
|
||||||
|
**API Reference**: [lancedb.table.Table.merge_insert][]
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:upsert_basic_async"
|
||||||
|
```
|
||||||
|
**API Reference**: [lancedb.table.AsyncTable.merge_insert][]
|
||||||
|
|
||||||
|
=== "Typescript[^1]"
|
||||||
|
|
||||||
|
=== "@lancedb/lancedb"
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
--8<-- "nodejs/examples/merge_insert.test.ts:upsert_basic"
|
||||||
|
```
|
||||||
|
**API Reference**: [lancedb.Table.mergeInsert](../js/classes/Table.md/#mergeInsert)
|
||||||
|
|
||||||
|
Read more in the guide on [merge insert](tables/merge_insert.md).
|
||||||
|
|
||||||
## Deleting from a table
|
## Deleting from a table
|
||||||
|
|
||||||
Use the `delete()` method on tables to delete rows from a table. To choose which rows to delete, provide a filter that matches on the metadata columns. This can delete any number of rows that match the filter.
|
Use the `delete()` method on tables to delete rows from a table. To choose which rows to delete, provide a filter that matches on the metadata columns. This can delete any number of rows that match the filter.
|
||||||
|
|||||||
135
docs/src/guides/tables/merge_insert.md
Normal file
135
docs/src/guides/tables/merge_insert.md
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
The merge insert command is a flexible API that can be used to perform:
|
||||||
|
|
||||||
|
1. Upsert
|
||||||
|
2. Insert-if-not-exists
|
||||||
|
3. Replace range
|
||||||
|
|
||||||
|
It works by joining the input data with the target table on a key you provide.
|
||||||
|
Often this key is a unique row id key. You can then specify what to do when
|
||||||
|
there is a match and when there is not a match. For example, for upsert you want
|
||||||
|
to update if the row has a match and insert if the row doesn't have a match.
|
||||||
|
Whereas for insert-if-not-exists you only want to insert if the row doesn't have
|
||||||
|
a match.
|
||||||
|
|
||||||
|
You can also read more in the API reference:
|
||||||
|
|
||||||
|
* Python
|
||||||
|
* Sync: [lancedb.table.Table.merge_insert][]
|
||||||
|
* Async: [lancedb.table.AsyncTable.merge_insert][]
|
||||||
|
* Typescript: [lancedb.Table.mergeInsert](../../js/classes/Table.md/#mergeinsert)
|
||||||
|
|
||||||
|
!!! tip "Use scalar indices to speed up merge insert"
|
||||||
|
|
||||||
|
The merge insert command needs to perform a join between the input data and the
|
||||||
|
target table on the `on` key you provide. This requires scanning that entire
|
||||||
|
column, which can be expensive for large tables. To speed up this operation,
|
||||||
|
you can create a scalar index on the `on` column, which will allow LanceDB to
|
||||||
|
find matches without having to scan the whole tables.
|
||||||
|
|
||||||
|
Read more about scalar indices in [Building a Scalar Index](../scalar_index.md)
|
||||||
|
guide.
|
||||||
|
|
||||||
|
!!! info "Embedding Functions"
|
||||||
|
|
||||||
|
Like the create table and add APIs, the merge insert API will automatically
|
||||||
|
compute embeddings if the table has a embedding definition in its schema.
|
||||||
|
If the input data doesn't contain the source column, or the vector column
|
||||||
|
is already filled, then the embeddings won't be computed. See the
|
||||||
|
[Embedding Functions](../../embeddings/embedding_functions.md) guide for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
## Upsert
|
||||||
|
|
||||||
|
Upsert updates rows if they exist and inserts them if they don't. To do this
|
||||||
|
with merge insert, enable both `when_matched_update_all()` and
|
||||||
|
`when_not_matched_insert_all()`.
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:upsert_basic"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:upsert_basic_async"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Typescript"
|
||||||
|
|
||||||
|
=== "@lancedb/lancedb"
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
--8<-- "nodejs/examples/merge_insert.test.ts:upsert_basic"
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Providing subsets of columns"
|
||||||
|
|
||||||
|
If a column is nullable, it can be omitted from input data and it will be
|
||||||
|
considered `null`. Columns can also be provided in any order.
|
||||||
|
|
||||||
|
## Insert-if-not-exists
|
||||||
|
|
||||||
|
To avoid inserting duplicate rows, you can use the insert-if-not-exists command.
|
||||||
|
This will only insert rows that do not have a match in the target table. To do
|
||||||
|
this with merge insert, enable just `when_not_matched_insert_all()`.
|
||||||
|
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:insert_if_not_exists"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:insert_if_not_exists_async"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Typescript"
|
||||||
|
|
||||||
|
=== "@lancedb/lancedb"
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
--8<-- "nodejs/examples/merge_insert.test.ts:insert_if_not_exists"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Replace range
|
||||||
|
|
||||||
|
You can also replace a range of rows in the target table with the input data.
|
||||||
|
For example, if you have a table of document chunks, where each chunk has
|
||||||
|
both a `doc_id` and a `chunk_id`, you can replace all chunks for a given
|
||||||
|
`doc_id` with updated chunks. This can be tricky otherwise because if you
|
||||||
|
try to use upsert when the new data has fewer chunks you will end up with
|
||||||
|
extra chunks. To avoid this, add another clause to delete any chunks for
|
||||||
|
the document that are not in the new data, with
|
||||||
|
`when_not_matched_by_source_delete`.
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:replace_range"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```python
|
||||||
|
--8<-- "python/python/tests/docs/test_merge_insert.py:replace_range_async"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Typescript"
|
||||||
|
|
||||||
|
=== "@lancedb/lancedb"
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
--8<-- "nodejs/examples/merge_insert.test.ts:replace_range"
|
||||||
|
```
|
||||||
@@ -36,7 +36,7 @@ const results = await table.vectorSearch([0.1, 0.3]).limit(20).toArray();
|
|||||||
console.log(results);
|
console.log(results);
|
||||||
```
|
```
|
||||||
|
|
||||||
The [quickstart](../basic.md) contains a more complete example.
|
The [quickstart](https://lancedb.github.io/lancedb/basic/) contains a more complete example.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|||||||
@@ -23,18 +23,6 @@ be closed when they are garbage collected.
|
|||||||
Any created tables are independent and will continue to work even if
|
Any created tables are independent and will continue to work even if
|
||||||
the underlying connection has been closed.
|
the underlying connection has been closed.
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new Connection()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new Connection(): Connection
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`Connection`](Connection.md)
|
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
### close()
|
### close()
|
||||||
@@ -71,7 +59,7 @@ Creates a new empty Table
|
|||||||
* **name**: `string`
|
* **name**: `string`
|
||||||
The name of the table.
|
The name of the table.
|
||||||
|
|
||||||
* **schema**: `SchemaLike`
|
* **schema**: [`SchemaLike`](../type-aliases/SchemaLike.md)
|
||||||
The schema of the table
|
The schema of the table
|
||||||
|
|
||||||
* **options?**: `Partial`<[`CreateTableOptions`](../interfaces/CreateTableOptions.md)>
|
* **options?**: `Partial`<[`CreateTableOptions`](../interfaces/CreateTableOptions.md)>
|
||||||
@@ -117,7 +105,7 @@ Creates a new Table and initialize it with new data.
|
|||||||
* **name**: `string`
|
* **name**: `string`
|
||||||
The name of the table.
|
The name of the table.
|
||||||
|
|
||||||
* **data**: `TableLike` \| `Record`<`string`, `unknown`>[]
|
* **data**: [`TableLike`](../type-aliases/TableLike.md) \| `Record`<`string`, `unknown`>[]
|
||||||
Non-empty Array of Records
|
Non-empty Array of Records
|
||||||
to be inserted into the table
|
to be inserted into the table
|
||||||
|
|
||||||
@@ -143,6 +131,20 @@ Return a brief description of the connection
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### dropAllTables()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
abstract dropAllTables(): Promise<void>
|
||||||
|
```
|
||||||
|
|
||||||
|
Drop all tables in the database.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Promise`<`void`>
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### dropTable()
|
### dropTable()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -189,7 +191,7 @@ Open a table in the database.
|
|||||||
* **name**: `string`
|
* **name**: `string`
|
||||||
The name of the table
|
The name of the table
|
||||||
|
|
||||||
* **options?**: `Partial`<`OpenTableOptions`>
|
* **options?**: `Partial`<[`OpenTableOptions`](../interfaces/OpenTableOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -72,11 +72,9 @@ The results of a full text search are ordered by relevance measured by BM25.
|
|||||||
|
|
||||||
You can combine filters with full text search.
|
You can combine filters with full text search.
|
||||||
|
|
||||||
For now, the full text search index only supports English, and doesn't support phrase search.
|
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`FtsOptions`>
|
* **options?**: `Partial`<[`FtsOptions`](../interfaces/FtsOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -98,7 +96,7 @@ the vectors.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`HnswPqOptions`>
|
* **options?**: `Partial`<[`HnswPqOptions`](../interfaces/HnswPqOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -120,7 +118,7 @@ the vectors.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`HnswSqOptions`>
|
* **options?**: `Partial`<[`HnswSqOptions`](../interfaces/HnswSqOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
|
|||||||
126
docs/src/js/classes/MergeInsertBuilder.md
Normal file
126
docs/src/js/classes/MergeInsertBuilder.md
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / MergeInsertBuilder
|
||||||
|
|
||||||
|
# Class: MergeInsertBuilder
|
||||||
|
|
||||||
|
A builder used to create and run a merge insert operation
|
||||||
|
|
||||||
|
## Constructors
|
||||||
|
|
||||||
|
### new MergeInsertBuilder()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
new MergeInsertBuilder(native, schema): MergeInsertBuilder
|
||||||
|
```
|
||||||
|
|
||||||
|
Construct a MergeInsertBuilder. __Internal use only.__
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **native**: `NativeMergeInsertBuilder`
|
||||||
|
|
||||||
|
* **schema**: `Schema`<`any`> \| `Promise`<`Schema`<`any`>>
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
[`MergeInsertBuilder`](MergeInsertBuilder.md)
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### execute()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
execute(data): Promise<void>
|
||||||
|
```
|
||||||
|
|
||||||
|
Executes the merge insert operation
|
||||||
|
|
||||||
|
Nothing is returned but the `Table` is updated
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **data**: [`Data`](../type-aliases/Data.md)
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Promise`<`void`>
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### whenMatchedUpdateAll()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
whenMatchedUpdateAll(options?): MergeInsertBuilder
|
||||||
|
```
|
||||||
|
|
||||||
|
Rows that exist in both the source table (new data) and
|
||||||
|
the target table (old data) will be updated, replacing
|
||||||
|
the old row with the corresponding matching row.
|
||||||
|
|
||||||
|
If there are multiple matches then the behavior is undefined.
|
||||||
|
Currently this causes multiple copies of the row to be created
|
||||||
|
but that behavior is subject to change.
|
||||||
|
|
||||||
|
An optional condition may be specified. If it is, then only
|
||||||
|
matched rows that satisfy the condtion will be updated. Any
|
||||||
|
rows that do not satisfy the condition will be left as they
|
||||||
|
are. Failing to satisfy the condition does not cause a
|
||||||
|
"matched row" to become a "not matched" row.
|
||||||
|
|
||||||
|
The condition should be an SQL string. Use the prefix
|
||||||
|
target. to refer to rows in the target table (old data)
|
||||||
|
and the prefix source. to refer to rows in the source
|
||||||
|
table (new data).
|
||||||
|
|
||||||
|
For example, "target.last_update < source.last_update"
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **options?**
|
||||||
|
|
||||||
|
* **options.where?**: `string`
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
[`MergeInsertBuilder`](MergeInsertBuilder.md)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### whenNotMatchedBySourceDelete()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
whenNotMatchedBySourceDelete(options?): MergeInsertBuilder
|
||||||
|
```
|
||||||
|
|
||||||
|
Rows that exist only in the target table (old data) will be
|
||||||
|
deleted. An optional condition can be provided to limit what
|
||||||
|
data is deleted.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **options?**
|
||||||
|
|
||||||
|
* **options.where?**: `string`
|
||||||
|
An optional condition to limit what data is deleted
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
[`MergeInsertBuilder`](MergeInsertBuilder.md)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### whenNotMatchedInsertAll()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
whenNotMatchedInsertAll(): MergeInsertBuilder
|
||||||
|
```
|
||||||
|
|
||||||
|
Rows that exist only in the source table (new data) should
|
||||||
|
be inserted into the target table.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
[`MergeInsertBuilder`](MergeInsertBuilder.md)
|
||||||
@@ -8,30 +8,14 @@
|
|||||||
|
|
||||||
A builder for LanceDB queries.
|
A builder for LanceDB queries.
|
||||||
|
|
||||||
|
## See
|
||||||
|
|
||||||
|
[Table#query](Table.md#query), [Table#search](Table.md#search)
|
||||||
|
|
||||||
## Extends
|
## Extends
|
||||||
|
|
||||||
- [`QueryBase`](QueryBase.md)<`NativeQuery`>
|
- [`QueryBase`](QueryBase.md)<`NativeQuery`>
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new Query()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new Query(tbl): Query
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **tbl**: `Table`
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`Query`](Query.md)
|
|
||||||
|
|
||||||
#### Overrides
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`constructor`](QueryBase.md#constructors)
|
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
### inner
|
### inner
|
||||||
@@ -46,42 +30,6 @@ protected inner: Query | Promise<Query>;
|
|||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
### \[asyncIterator\]()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
asyncIterator: AsyncIterator<RecordBatch<any>, any, undefined>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`AsyncIterator`<`RecordBatch`<`any`>, `any`, `undefined`>
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`[asyncIterator]`](QueryBase.md#%5Basynciterator%5D)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### doCall()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected doCall(fn): void
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **fn**
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`void`
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`doCall`](QueryBase.md#docall)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### execute()
|
### execute()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -92,7 +40,7 @@ Execute the query and return the results as an
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -161,7 +109,7 @@ fastSearch(): this
|
|||||||
Skip searching un-indexed data. This can make search faster, but will miss
|
Skip searching un-indexed data. This can make search faster, but will miss
|
||||||
any data that is not yet indexed.
|
any data that is not yet indexed.
|
||||||
|
|
||||||
Use lancedb.Table#optimize to index all un-indexed data.
|
Use [Table#optimize](Table.md#optimize) to index all un-indexed data.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -189,7 +137,7 @@ A filter statement to be applied to this query.
|
|||||||
|
|
||||||
`this`
|
`this`
|
||||||
|
|
||||||
#### Alias
|
#### See
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -213,7 +161,7 @@ fullTextSearch(query, options?): this
|
|||||||
|
|
||||||
* **query**: `string`
|
* **query**: `string`
|
||||||
|
|
||||||
* **options?**: `Partial`<`FullTextSearchOptions`>
|
* **options?**: `Partial`<[`FullTextSearchOptions`](../interfaces/FullTextSearchOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -250,26 +198,6 @@ called then every valid row from the table will be returned.
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### nativeExecute()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected nativeExecute(options?): Promise<RecordBatchIterator>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`Promise`<`RecordBatchIterator`>
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`nativeExecute`](QueryBase.md#nativeexecute)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### nearestTo()
|
### nearestTo()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -294,7 +222,7 @@ If there is more than one vector column you must use
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **vector**: `IntoVector`
|
* **vector**: [`IntoVector`](../type-aliases/IntoVector.md)
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -427,7 +355,7 @@ Collect the results as an array of objects.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -449,7 +377,7 @@ Collect the results as an Arrow
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,11 @@
|
|||||||
|
|
||||||
Common methods supported by all query types
|
Common methods supported by all query types
|
||||||
|
|
||||||
|
## See
|
||||||
|
|
||||||
|
- [Query](Query.md)
|
||||||
|
- [VectorQuery](VectorQuery.md)
|
||||||
|
|
||||||
## Extended by
|
## Extended by
|
||||||
|
|
||||||
- [`Query`](Query.md)
|
- [`Query`](Query.md)
|
||||||
@@ -21,22 +26,6 @@ Common methods supported by all query types
|
|||||||
|
|
||||||
- `AsyncIterable`<`RecordBatch`>
|
- `AsyncIterable`<`RecordBatch`>
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new QueryBase()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected new QueryBase<NativeQueryType>(inner): QueryBase<NativeQueryType>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **inner**: `NativeQueryType` \| `Promise`<`NativeQueryType`>
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md)<`NativeQueryType`>
|
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
### inner
|
### inner
|
||||||
@@ -47,38 +36,6 @@ protected inner: NativeQueryType | Promise<NativeQueryType>;
|
|||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
### \[asyncIterator\]()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
asyncIterator: AsyncIterator<RecordBatch<any>, any, undefined>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`AsyncIterator`<`RecordBatch`<`any`>, `any`, `undefined`>
|
|
||||||
|
|
||||||
#### Implementation of
|
|
||||||
|
|
||||||
`AsyncIterable.[asyncIterator]`
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### doCall()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected doCall(fn): void
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **fn**
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`void`
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### execute()
|
### execute()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -89,7 +46,7 @@ Execute the query and return the results as an
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -150,7 +107,7 @@ fastSearch(): this
|
|||||||
Skip searching un-indexed data. This can make search faster, but will miss
|
Skip searching un-indexed data. This can make search faster, but will miss
|
||||||
any data that is not yet indexed.
|
any data that is not yet indexed.
|
||||||
|
|
||||||
Use lancedb.Table#optimize to index all un-indexed data.
|
Use [Table#optimize](Table.md#optimize) to index all un-indexed data.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -174,7 +131,7 @@ A filter statement to be applied to this query.
|
|||||||
|
|
||||||
`this`
|
`this`
|
||||||
|
|
||||||
#### Alias
|
#### See
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -194,7 +151,7 @@ fullTextSearch(query, options?): this
|
|||||||
|
|
||||||
* **query**: `string`
|
* **query**: `string`
|
||||||
|
|
||||||
* **options?**: `Partial`<`FullTextSearchOptions`>
|
* **options?**: `Partial`<[`FullTextSearchOptions`](../interfaces/FullTextSearchOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -223,22 +180,6 @@ called then every valid row from the table will be returned.
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### nativeExecute()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected nativeExecute(options?): Promise<RecordBatchIterator>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`Promise`<`RecordBatchIterator`>
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### offset()
|
### offset()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -314,7 +255,7 @@ Collect the results as an array of objects.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -332,7 +273,7 @@ Collect the results as an Arrow
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -14,21 +14,13 @@ will be freed when the Table is garbage collected. To eagerly free the cache yo
|
|||||||
can call the `close` method. Once the Table is closed, it cannot be used for any
|
can call the `close` method. Once the Table is closed, it cannot be used for any
|
||||||
further operations.
|
further operations.
|
||||||
|
|
||||||
|
Tables are created using the methods [Connection#createTable](Connection.md#createtable)
|
||||||
|
and [Connection#createEmptyTable](Connection.md#createemptytable). Existing tables are opened
|
||||||
|
using [Connection#openTable](Connection.md#opentable).
|
||||||
|
|
||||||
Closing a table is optional. It not closed, it will be closed when it is garbage
|
Closing a table is optional. It not closed, it will be closed when it is garbage
|
||||||
collected.
|
collected.
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new Table()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new Table(): Table
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`Table`](Table.md)
|
|
||||||
|
|
||||||
## Accessors
|
## Accessors
|
||||||
|
|
||||||
### name
|
### name
|
||||||
@@ -216,6 +208,9 @@ Indices on vector columns will speed up vector searches.
|
|||||||
Indices on scalar columns will speed up filtering (in both
|
Indices on scalar columns will speed up filtering (in both
|
||||||
vector and non-vector searches)
|
vector and non-vector searches)
|
||||||
|
|
||||||
|
We currently don't support custom named indexes.
|
||||||
|
The index name will always be `${column}_idx`.
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **column**: `string`
|
* **column**: `string`
|
||||||
@@ -226,11 +221,6 @@ vector and non-vector searches)
|
|||||||
|
|
||||||
`Promise`<`void`>
|
`Promise`<`void`>
|
||||||
|
|
||||||
#### Note
|
|
||||||
|
|
||||||
We currently don't support custom named indexes,
|
|
||||||
The index name will always be `${column}_idx`
|
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -329,18 +319,14 @@ Drop an index from the table.
|
|||||||
|
|
||||||
* **name**: `string`
|
* **name**: `string`
|
||||||
The name of the index.
|
The name of the index.
|
||||||
|
This does not delete the index from disk, it just removes it from the table.
|
||||||
|
To delete the index, run [Table#optimize](Table.md#optimize) after dropping the index.
|
||||||
|
Use [Table.listIndices](Table.md#listindices) to find the names of the indices.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`void`>
|
`Promise`<`void`>
|
||||||
|
|
||||||
#### Note
|
|
||||||
|
|
||||||
This does not delete the index from disk, it just removes it from the table.
|
|
||||||
To delete the index, run [Table#optimize](Table.md#optimize) after dropping the index.
|
|
||||||
|
|
||||||
Use [Table.listIndices](Table.md#listindices) to find the names of the indices.
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### indexStats()
|
### indexStats()
|
||||||
@@ -404,7 +390,7 @@ List all the versions of the table
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`Version`[]>
|
`Promise`<[`Version`](../interfaces/Version.md)[]>
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -420,7 +406,7 @@ abstract mergeInsert(on): MergeInsertBuilder
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`MergeInsertBuilder`
|
[`MergeInsertBuilder`](MergeInsertBuilder.md)
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -464,7 +450,7 @@ Modeled after ``VACUUM`` in PostgreSQL.
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`OptimizeStats`>
|
`Promise`<[`OptimizeStats`](../interfaces/OptimizeStats.md)>
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -581,7 +567,7 @@ Get the schema of the table.
|
|||||||
abstract search(
|
abstract search(
|
||||||
query,
|
query,
|
||||||
queryType?,
|
queryType?,
|
||||||
ftsColumns?): VectorQuery | Query
|
ftsColumns?): Query | VectorQuery
|
||||||
```
|
```
|
||||||
|
|
||||||
Create a search query to find the nearest neighbors
|
Create a search query to find the nearest neighbors
|
||||||
@@ -589,7 +575,7 @@ of the given query
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **query**: `string` \| `IntoVector`
|
* **query**: `string` \| [`IntoVector`](../type-aliases/IntoVector.md)
|
||||||
the query, a vector or string
|
the query, a vector or string
|
||||||
|
|
||||||
* **queryType?**: `string`
|
* **queryType?**: `string`
|
||||||
@@ -603,7 +589,7 @@ of the given query
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
[`VectorQuery`](VectorQuery.md) \| [`Query`](Query.md)
|
[`Query`](Query.md) \| [`VectorQuery`](VectorQuery.md)
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -722,7 +708,7 @@ by `query`.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **vector**: `IntoVector`
|
* **vector**: [`IntoVector`](../type-aliases/IntoVector.md)
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -745,38 +731,3 @@ Retrieve the version of the table
|
|||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`number`>
|
`Promise`<`number`>
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### parseTableData()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
static parseTableData(
|
|
||||||
data,
|
|
||||||
options?,
|
|
||||||
streaming?): Promise<object>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **data**: `TableLike` \| `Record`<`string`, `unknown`>[]
|
|
||||||
|
|
||||||
* **options?**: `Partial`<[`CreateTableOptions`](../interfaces/CreateTableOptions.md)>
|
|
||||||
|
|
||||||
* **streaming?**: `boolean` = `false`
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`Promise`<`object`>
|
|
||||||
|
|
||||||
##### buf
|
|
||||||
|
|
||||||
```ts
|
|
||||||
buf: Buffer;
|
|
||||||
```
|
|
||||||
|
|
||||||
##### mode
|
|
||||||
|
|
||||||
```ts
|
|
||||||
mode: string;
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -10,30 +10,14 @@ A builder used to construct a vector search
|
|||||||
|
|
||||||
This builder can be reused to execute the query many times.
|
This builder can be reused to execute the query many times.
|
||||||
|
|
||||||
|
## See
|
||||||
|
|
||||||
|
[Query#nearestTo](Query.md#nearestto)
|
||||||
|
|
||||||
## Extends
|
## Extends
|
||||||
|
|
||||||
- [`QueryBase`](QueryBase.md)<`NativeVectorQuery`>
|
- [`QueryBase`](QueryBase.md)<`NativeVectorQuery`>
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new VectorQuery()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new VectorQuery(inner): VectorQuery
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **inner**: `VectorQuery` \| `Promise`<`VectorQuery`>
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`VectorQuery`](VectorQuery.md)
|
|
||||||
|
|
||||||
#### Overrides
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`constructor`](QueryBase.md#constructors)
|
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
### inner
|
### inner
|
||||||
@@ -48,22 +32,6 @@ protected inner: VectorQuery | Promise<VectorQuery>;
|
|||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
### \[asyncIterator\]()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
asyncIterator: AsyncIterator<RecordBatch<any>, any, undefined>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`AsyncIterator`<`RecordBatch`<`any`>, `any`, `undefined`>
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`[asyncIterator]`](QueryBase.md#%5Basynciterator%5D)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### addQueryVector()
|
### addQueryVector()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -72,7 +40,7 @@ addQueryVector(vector): VectorQuery
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **vector**: `IntoVector`
|
* **vector**: [`IntoVector`](../type-aliases/IntoVector.md)
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -179,26 +147,6 @@ By default "l2" is used.
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### doCall()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected doCall(fn): void
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **fn**
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`void`
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`doCall`](QueryBase.md#docall)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### ef()
|
### ef()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -233,7 +181,7 @@ Execute the query and return the results as an
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -302,7 +250,7 @@ fastSearch(): this
|
|||||||
Skip searching un-indexed data. This can make search faster, but will miss
|
Skip searching un-indexed data. This can make search faster, but will miss
|
||||||
any data that is not yet indexed.
|
any data that is not yet indexed.
|
||||||
|
|
||||||
Use lancedb.Table#optimize to index all un-indexed data.
|
Use [Table#optimize](Table.md#optimize) to index all un-indexed data.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -330,7 +278,7 @@ A filter statement to be applied to this query.
|
|||||||
|
|
||||||
`this`
|
`this`
|
||||||
|
|
||||||
#### Alias
|
#### See
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -354,7 +302,7 @@ fullTextSearch(query, options?): this
|
|||||||
|
|
||||||
* **query**: `string`
|
* **query**: `string`
|
||||||
|
|
||||||
* **options?**: `Partial`<`FullTextSearchOptions`>
|
* **options?**: `Partial`<[`FullTextSearchOptions`](../interfaces/FullTextSearchOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -391,26 +339,6 @@ called then every valid row from the table will be returned.
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### nativeExecute()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
protected nativeExecute(options?): Promise<RecordBatchIterator>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`Promise`<`RecordBatchIterator`>
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
[`QueryBase`](QueryBase.md).[`nativeExecute`](QueryBase.md#nativeexecute)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### nprobes()
|
### nprobes()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -625,7 +553,7 @@ Collect the results as an array of objects.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@@ -647,7 +575,7 @@ Collect the results as an Arrow
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **options?**: `Partial`<`QueryExecutionOptions`>
|
* **options?**: `Partial`<[`QueryExecutionOptions`](../interfaces/QueryExecutionOptions.md)>
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
[**@lancedb/lancedb**](../README.md) • **Docs**
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
[@lancedb/lancedb](../globals.md) / WriteMode
|
|
||||||
|
|
||||||
# Enumeration: WriteMode
|
|
||||||
|
|
||||||
Write mode for writing a table.
|
|
||||||
|
|
||||||
## Enumeration Members
|
|
||||||
|
|
||||||
### Append
|
|
||||||
|
|
||||||
```ts
|
|
||||||
Append: "Append";
|
|
||||||
```
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### Create
|
|
||||||
|
|
||||||
```ts
|
|
||||||
Create: "Create";
|
|
||||||
```
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### Overwrite
|
|
||||||
|
|
||||||
```ts
|
|
||||||
Overwrite: "Overwrite";
|
|
||||||
```
|
|
||||||
@@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
# Function: connect()
|
# Function: connect()
|
||||||
|
|
||||||
## connect(uri, opts)
|
## connect(uri, options)
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
function connect(uri, opts?): Promise<Connection>
|
function connect(uri, options?): Promise<Connection>
|
||||||
```
|
```
|
||||||
|
|
||||||
Connect to a LanceDB instance at the given URI.
|
Connect to a LanceDB instance at the given URI.
|
||||||
@@ -26,7 +26,8 @@ Accepted formats:
|
|||||||
The uri of the database. If the database uri starts
|
The uri of the database. If the database uri starts
|
||||||
with `db://` then it connects to a remote database.
|
with `db://` then it connects to a remote database.
|
||||||
|
|
||||||
* **opts?**: `Partial`<[`ConnectionOptions`](../interfaces/ConnectionOptions.md)>
|
* **options?**: `Partial`<[`ConnectionOptions`](../interfaces/ConnectionOptions.md)>
|
||||||
|
The options to use when connecting to the database
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@@ -49,10 +50,10 @@ const conn = await connect(
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
## connect(opts)
|
## connect(options)
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
function connect(opts): Promise<Connection>
|
function connect(options): Promise<Connection>
|
||||||
```
|
```
|
||||||
|
|
||||||
Connect to a LanceDB instance at the given URI.
|
Connect to a LanceDB instance at the given URI.
|
||||||
@@ -65,7 +66,8 @@ Accepted formats:
|
|||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
|
||||||
* **opts**: `Partial`<[`ConnectionOptions`](../interfaces/ConnectionOptions.md)> & `object`
|
* **options**: `Partial`<[`ConnectionOptions`](../interfaces/ConnectionOptions.md)> & `object`
|
||||||
|
The options to use when connecting to the database
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ when creating a table or adding data to it)
|
|||||||
This function converts an array of Record<String, any> (row-major JS objects)
|
This function converts an array of Record<String, any> (row-major JS objects)
|
||||||
to an Arrow Table (a columnar structure)
|
to an Arrow Table (a columnar structure)
|
||||||
|
|
||||||
Note that it currently does not support nulls.
|
|
||||||
|
|
||||||
If a schema is provided then it will be used to determine the resulting array
|
If a schema is provided then it will be used to determine the resulting array
|
||||||
types. Fields will also be reordered to fit the order defined by the schema.
|
types. Fields will also be reordered to fit the order defined by the schema.
|
||||||
|
|
||||||
@@ -31,6 +29,9 @@ If a schema is not provided then the types will be inferred and the field order
|
|||||||
will be controlled by the order of properties in the first record. If a type
|
will be controlled by the order of properties in the first record. If a type
|
||||||
is inferred it will always be nullable.
|
is inferred it will always be nullable.
|
||||||
|
|
||||||
|
If not all fields are found in the data, then a subset of the schema will be
|
||||||
|
returned.
|
||||||
|
|
||||||
If the input is empty then a schema must be provided to create an empty table.
|
If the input is empty then a schema must be provided to create an empty table.
|
||||||
|
|
||||||
When a schema is not specified then data types will be inferred. The inference
|
When a schema is not specified then data types will be inferred. The inference
|
||||||
@@ -38,6 +39,7 @@ rules are as follows:
|
|||||||
|
|
||||||
- boolean => Bool
|
- boolean => Bool
|
||||||
- number => Float64
|
- number => Float64
|
||||||
|
- bigint => Int64
|
||||||
- String => Utf8
|
- String => Utf8
|
||||||
- Buffer => Binary
|
- Buffer => Binary
|
||||||
- Record<String, any> => Struct
|
- Record<String, any> => Struct
|
||||||
@@ -57,6 +59,7 @@ rules are as follows:
|
|||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
```ts
|
||||||
import { fromTableToBuffer, makeArrowTable } from "../arrow";
|
import { fromTableToBuffer, makeArrowTable } from "../arrow";
|
||||||
import { Field, FixedSizeList, Float16, Float32, Int32, Schema } from "apache-arrow";
|
import { Field, FixedSizeList, Float16, Float32, Int32, Schema } from "apache-arrow";
|
||||||
|
|
||||||
@@ -78,7 +81,6 @@ The `vectorColumns` option can be used to support other vector column
|
|||||||
names and data types.
|
names and data types.
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
|
|
||||||
const schema = new Schema([
|
const schema = new Schema([
|
||||||
new Field("a", new Float64()),
|
new Field("a", new Float64()),
|
||||||
new Field("b", new Float64()),
|
new Field("b", new Float64()),
|
||||||
@@ -97,8 +99,7 @@ const schema = new Schema([
|
|||||||
|
|
||||||
You can specify the vector column types and names using the options as well
|
You can specify the vector column types and names using the options as well
|
||||||
|
|
||||||
```typescript
|
```ts
|
||||||
|
|
||||||
const schema = new Schema([
|
const schema = new Schema([
|
||||||
new Field('a', new Float64()),
|
new Field('a', new Float64()),
|
||||||
new Field('b', new Float64()),
|
new Field('b', new Float64()),
|
||||||
|
|||||||
@@ -9,15 +9,12 @@
|
|||||||
- [embedding](namespaces/embedding/README.md)
|
- [embedding](namespaces/embedding/README.md)
|
||||||
- [rerankers](namespaces/rerankers/README.md)
|
- [rerankers](namespaces/rerankers/README.md)
|
||||||
|
|
||||||
## Enumerations
|
|
||||||
|
|
||||||
- [WriteMode](enumerations/WriteMode.md)
|
|
||||||
|
|
||||||
## Classes
|
## Classes
|
||||||
|
|
||||||
- [Connection](classes/Connection.md)
|
- [Connection](classes/Connection.md)
|
||||||
- [Index](classes/Index.md)
|
- [Index](classes/Index.md)
|
||||||
- [MakeArrowTableOptions](classes/MakeArrowTableOptions.md)
|
- [MakeArrowTableOptions](classes/MakeArrowTableOptions.md)
|
||||||
|
- [MergeInsertBuilder](classes/MergeInsertBuilder.md)
|
||||||
- [Query](classes/Query.md)
|
- [Query](classes/Query.md)
|
||||||
- [QueryBase](classes/QueryBase.md)
|
- [QueryBase](classes/QueryBase.md)
|
||||||
- [RecordBatchIterator](classes/RecordBatchIterator.md)
|
- [RecordBatchIterator](classes/RecordBatchIterator.md)
|
||||||
@@ -31,23 +28,39 @@
|
|||||||
- [AddDataOptions](interfaces/AddDataOptions.md)
|
- [AddDataOptions](interfaces/AddDataOptions.md)
|
||||||
- [ClientConfig](interfaces/ClientConfig.md)
|
- [ClientConfig](interfaces/ClientConfig.md)
|
||||||
- [ColumnAlteration](interfaces/ColumnAlteration.md)
|
- [ColumnAlteration](interfaces/ColumnAlteration.md)
|
||||||
|
- [CompactionStats](interfaces/CompactionStats.md)
|
||||||
- [ConnectionOptions](interfaces/ConnectionOptions.md)
|
- [ConnectionOptions](interfaces/ConnectionOptions.md)
|
||||||
- [CreateTableOptions](interfaces/CreateTableOptions.md)
|
- [CreateTableOptions](interfaces/CreateTableOptions.md)
|
||||||
- [ExecutableQuery](interfaces/ExecutableQuery.md)
|
- [ExecutableQuery](interfaces/ExecutableQuery.md)
|
||||||
|
- [FtsOptions](interfaces/FtsOptions.md)
|
||||||
|
- [FullTextSearchOptions](interfaces/FullTextSearchOptions.md)
|
||||||
|
- [HnswPqOptions](interfaces/HnswPqOptions.md)
|
||||||
|
- [HnswSqOptions](interfaces/HnswSqOptions.md)
|
||||||
- [IndexConfig](interfaces/IndexConfig.md)
|
- [IndexConfig](interfaces/IndexConfig.md)
|
||||||
- [IndexOptions](interfaces/IndexOptions.md)
|
- [IndexOptions](interfaces/IndexOptions.md)
|
||||||
- [IndexStatistics](interfaces/IndexStatistics.md)
|
- [IndexStatistics](interfaces/IndexStatistics.md)
|
||||||
- [IvfPqOptions](interfaces/IvfPqOptions.md)
|
- [IvfPqOptions](interfaces/IvfPqOptions.md)
|
||||||
|
- [OpenTableOptions](interfaces/OpenTableOptions.md)
|
||||||
- [OptimizeOptions](interfaces/OptimizeOptions.md)
|
- [OptimizeOptions](interfaces/OptimizeOptions.md)
|
||||||
|
- [OptimizeStats](interfaces/OptimizeStats.md)
|
||||||
|
- [QueryExecutionOptions](interfaces/QueryExecutionOptions.md)
|
||||||
|
- [RemovalStats](interfaces/RemovalStats.md)
|
||||||
- [RetryConfig](interfaces/RetryConfig.md)
|
- [RetryConfig](interfaces/RetryConfig.md)
|
||||||
- [TableNamesOptions](interfaces/TableNamesOptions.md)
|
- [TableNamesOptions](interfaces/TableNamesOptions.md)
|
||||||
- [TimeoutConfig](interfaces/TimeoutConfig.md)
|
- [TimeoutConfig](interfaces/TimeoutConfig.md)
|
||||||
- [UpdateOptions](interfaces/UpdateOptions.md)
|
- [UpdateOptions](interfaces/UpdateOptions.md)
|
||||||
- [WriteOptions](interfaces/WriteOptions.md)
|
- [Version](interfaces/Version.md)
|
||||||
|
|
||||||
## Type Aliases
|
## Type Aliases
|
||||||
|
|
||||||
- [Data](type-aliases/Data.md)
|
- [Data](type-aliases/Data.md)
|
||||||
|
- [DataLike](type-aliases/DataLike.md)
|
||||||
|
- [FieldLike](type-aliases/FieldLike.md)
|
||||||
|
- [IntoSql](type-aliases/IntoSql.md)
|
||||||
|
- [IntoVector](type-aliases/IntoVector.md)
|
||||||
|
- [RecordBatchLike](type-aliases/RecordBatchLike.md)
|
||||||
|
- [SchemaLike](type-aliases/SchemaLike.md)
|
||||||
|
- [TableLike](type-aliases/TableLike.md)
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,14 @@
|
|||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
|
### extraHeaders?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional extraHeaders: Record<string, string>;
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### retryConfig?
|
### retryConfig?
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
|
|||||||
49
docs/src/js/interfaces/CompactionStats.md
Normal file
49
docs/src/js/interfaces/CompactionStats.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / CompactionStats
|
||||||
|
|
||||||
|
# Interface: CompactionStats
|
||||||
|
|
||||||
|
Statistics about a compaction operation.
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### filesAdded
|
||||||
|
|
||||||
|
```ts
|
||||||
|
filesAdded: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of new, compacted data files added
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### filesRemoved
|
||||||
|
|
||||||
|
```ts
|
||||||
|
filesRemoved: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of data files removed
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### fragmentsAdded
|
||||||
|
|
||||||
|
```ts
|
||||||
|
fragmentsAdded: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of new, compacted fragments added
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### fragmentsRemoved
|
||||||
|
|
||||||
|
```ts
|
||||||
|
fragmentsRemoved: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of fragments removed
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
### dataStorageVersion?
|
### ~~dataStorageVersion?~~
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
optional dataStorageVersion: string;
|
optional dataStorageVersion: string;
|
||||||
@@ -19,6 +19,10 @@ The version of the data storage format to use.
|
|||||||
The default is `stable`.
|
The default is `stable`.
|
||||||
Set to "legacy" to use the old format.
|
Set to "legacy" to use the old format.
|
||||||
|
|
||||||
|
#### Deprecated
|
||||||
|
|
||||||
|
Pass `new_table_data_storage_version` to storageOptions instead.
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### embeddingFunction?
|
### embeddingFunction?
|
||||||
@@ -29,7 +33,7 @@ optional embeddingFunction: EmbeddingFunctionConfig;
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### enableV2ManifestPaths?
|
### ~~enableV2ManifestPaths?~~
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
optional enableV2ManifestPaths: boolean;
|
optional enableV2ManifestPaths: boolean;
|
||||||
@@ -41,6 +45,10 @@ turning this on will make the dataset unreadable for older versions
|
|||||||
of LanceDB (prior to 0.10.0). To migrate an existing dataset, instead
|
of LanceDB (prior to 0.10.0). To migrate an existing dataset, instead
|
||||||
use the LocalTable#migrateManifestPathsV2 method.
|
use the LocalTable#migrateManifestPathsV2 method.
|
||||||
|
|
||||||
|
#### Deprecated
|
||||||
|
|
||||||
|
Pass `new_table_enable_v2_manifest_paths` to storageOptions instead.
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### existOk
|
### existOk
|
||||||
@@ -90,17 +98,3 @@ Options already set on the connection will be inherited by the table,
|
|||||||
but can be overridden here.
|
but can be overridden here.
|
||||||
|
|
||||||
The available options are described at https://lancedb.github.io/lancedb/guides/storage/
|
The available options are described at https://lancedb.github.io/lancedb/guides/storage/
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### useLegacyFormat?
|
|
||||||
|
|
||||||
```ts
|
|
||||||
optional useLegacyFormat: boolean;
|
|
||||||
```
|
|
||||||
|
|
||||||
If true then data files will be written with the legacy format
|
|
||||||
|
|
||||||
The default is false.
|
|
||||||
|
|
||||||
Deprecated. Use data storage version instead.
|
|
||||||
|
|||||||
103
docs/src/js/interfaces/FtsOptions.md
Normal file
103
docs/src/js/interfaces/FtsOptions.md
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / FtsOptions
|
||||||
|
|
||||||
|
# Interface: FtsOptions
|
||||||
|
|
||||||
|
Options to create a full text search index
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### asciiFolding?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional asciiFolding: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
whether to remove punctuation
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### baseTokenizer?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional baseTokenizer: "raw" | "simple" | "whitespace";
|
||||||
|
```
|
||||||
|
|
||||||
|
The tokenizer to use when building the index.
|
||||||
|
The default is "simple".
|
||||||
|
|
||||||
|
The following tokenizers are available:
|
||||||
|
|
||||||
|
"simple" - Simple tokenizer. This tokenizer splits the text into tokens using whitespace and punctuation as a delimiter.
|
||||||
|
|
||||||
|
"whitespace" - Whitespace tokenizer. This tokenizer splits the text into tokens using whitespace as a delimiter.
|
||||||
|
|
||||||
|
"raw" - Raw tokenizer. This tokenizer does not split the text into tokens and indexes the entire text as a single token.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### language?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional language: string;
|
||||||
|
```
|
||||||
|
|
||||||
|
language for stemming and stop words
|
||||||
|
this is only used when `stem` or `remove_stop_words` is true
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### lowercase?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional lowercase: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
whether to lowercase tokens
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### maxTokenLength?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional maxTokenLength: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
maximum token length
|
||||||
|
tokens longer than this length will be ignored
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### removeStopWords?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional removeStopWords: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
whether to remove stop words
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### stem?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional stem: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
whether to stem tokens
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### withPosition?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional withPosition: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
Whether to build the index with positions.
|
||||||
|
True by default.
|
||||||
|
If set to false, the index will not store the positions of the tokens in the text,
|
||||||
|
which will make the index smaller and faster to build, but will not support phrase queries.
|
||||||
22
docs/src/js/interfaces/FullTextSearchOptions.md
Normal file
22
docs/src/js/interfaces/FullTextSearchOptions.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / FullTextSearchOptions
|
||||||
|
|
||||||
|
# Interface: FullTextSearchOptions
|
||||||
|
|
||||||
|
Options that control the behavior of a full text search
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### columns?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional columns: string | string[];
|
||||||
|
```
|
||||||
|
|
||||||
|
The columns to search
|
||||||
|
|
||||||
|
If not specified, all indexed columns will be searched.
|
||||||
|
For now, only one column can be searched.
|
||||||
149
docs/src/js/interfaces/HnswPqOptions.md
Normal file
149
docs/src/js/interfaces/HnswPqOptions.md
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / HnswPqOptions
|
||||||
|
|
||||||
|
# Interface: HnswPqOptions
|
||||||
|
|
||||||
|
Options to create an `HNSW_PQ` index
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### distanceType?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional distanceType: "l2" | "cosine" | "dot";
|
||||||
|
```
|
||||||
|
|
||||||
|
The distance metric used to train the index.
|
||||||
|
|
||||||
|
Default value is "l2".
|
||||||
|
|
||||||
|
The following distance types are available:
|
||||||
|
|
||||||
|
"l2" - Euclidean distance. This is a very common distance metric that
|
||||||
|
accounts for both magnitude and direction when determining the distance
|
||||||
|
between vectors. L2 distance has a range of [0, ∞).
|
||||||
|
|
||||||
|
"cosine" - Cosine distance. Cosine distance is a distance metric
|
||||||
|
calculated from the cosine similarity between two vectors. Cosine
|
||||||
|
similarity is a measure of similarity between two non-zero vectors of an
|
||||||
|
inner product space. It is defined to equal the cosine of the angle
|
||||||
|
between them. Unlike L2, the cosine distance is not affected by the
|
||||||
|
magnitude of the vectors. Cosine distance has a range of [0, 2].
|
||||||
|
|
||||||
|
"dot" - Dot product. Dot distance is the dot product of two vectors. Dot
|
||||||
|
distance has a range of (-∞, ∞). If the vectors are normalized (i.e. their
|
||||||
|
L2 norm is 1), then dot distance is equivalent to the cosine distance.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### efConstruction?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional efConstruction: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of candidates to evaluate during the construction of the HNSW graph.
|
||||||
|
|
||||||
|
The default value is 300.
|
||||||
|
|
||||||
|
This value controls the tradeoff between build speed and accuracy.
|
||||||
|
The higher the value the more accurate the build but the slower it will be.
|
||||||
|
150 to 300 is the typical range. 100 is a minimum for good quality search
|
||||||
|
results. In most cases, there is no benefit to setting this higher than 500.
|
||||||
|
This value should be set to a value that is not less than `ef` in the search phase.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### m?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional m: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of neighbors to select for each vector in the HNSW graph.
|
||||||
|
|
||||||
|
The default value is 20.
|
||||||
|
|
||||||
|
This value controls the tradeoff between search speed and accuracy.
|
||||||
|
The higher the value the more accurate the search but the slower it will be.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### maxIterations?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional maxIterations: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
Max iterations to train kmeans.
|
||||||
|
|
||||||
|
The default value is 50.
|
||||||
|
|
||||||
|
When training an IVF index we use kmeans to calculate the partitions. This parameter
|
||||||
|
controls how many iterations of kmeans to run.
|
||||||
|
|
||||||
|
Increasing this might improve the quality of the index but in most cases the parameter
|
||||||
|
is unused because kmeans will converge with fewer iterations. The parameter is only
|
||||||
|
used in cases where kmeans does not appear to converge. In those cases it is unlikely
|
||||||
|
that setting this larger will lead to the index converging anyways.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### numPartitions?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional numPartitions: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of IVF partitions to create.
|
||||||
|
|
||||||
|
For HNSW, we recommend a small number of partitions. Setting this to 1 works
|
||||||
|
well for most tables. For very large tables, training just one HNSW graph
|
||||||
|
will require too much memory. Each partition becomes its own HNSW graph, so
|
||||||
|
setting this value higher reduces the peak memory use of training.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### numSubVectors?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional numSubVectors: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
Number of sub-vectors of PQ.
|
||||||
|
|
||||||
|
This value controls how much the vector is compressed during the quantization step.
|
||||||
|
The more sub vectors there are the less the vector is compressed. The default is
|
||||||
|
the dimension of the vector divided by 16. If the dimension is not evenly divisible
|
||||||
|
by 16 we use the dimension divded by 8.
|
||||||
|
|
||||||
|
The above two cases are highly preferred. Having 8 or 16 values per subvector allows
|
||||||
|
us to use efficient SIMD instructions.
|
||||||
|
|
||||||
|
If the dimension is not visible by 8 then we use 1 subvector. This is not ideal and
|
||||||
|
will likely result in poor performance.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### sampleRate?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional sampleRate: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The rate used to calculate the number of training vectors for kmeans.
|
||||||
|
|
||||||
|
Default value is 256.
|
||||||
|
|
||||||
|
When an IVF index is trained, we need to calculate partitions. These are groups
|
||||||
|
of vectors that are similar to each other. To do this we use an algorithm called kmeans.
|
||||||
|
|
||||||
|
Running kmeans on a large dataset can be slow. To speed this up we run kmeans on a
|
||||||
|
random sample of the data. This parameter controls the size of the sample. The total
|
||||||
|
number of vectors used to train the index is `sample_rate * num_partitions`.
|
||||||
|
|
||||||
|
Increasing this value might improve the quality of the index but in most cases the
|
||||||
|
default should be sufficient.
|
||||||
128
docs/src/js/interfaces/HnswSqOptions.md
Normal file
128
docs/src/js/interfaces/HnswSqOptions.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / HnswSqOptions
|
||||||
|
|
||||||
|
# Interface: HnswSqOptions
|
||||||
|
|
||||||
|
Options to create an `HNSW_SQ` index
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### distanceType?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional distanceType: "l2" | "cosine" | "dot";
|
||||||
|
```
|
||||||
|
|
||||||
|
The distance metric used to train the index.
|
||||||
|
|
||||||
|
Default value is "l2".
|
||||||
|
|
||||||
|
The following distance types are available:
|
||||||
|
|
||||||
|
"l2" - Euclidean distance. This is a very common distance metric that
|
||||||
|
accounts for both magnitude and direction when determining the distance
|
||||||
|
between vectors. L2 distance has a range of [0, ∞).
|
||||||
|
|
||||||
|
"cosine" - Cosine distance. Cosine distance is a distance metric
|
||||||
|
calculated from the cosine similarity between two vectors. Cosine
|
||||||
|
similarity is a measure of similarity between two non-zero vectors of an
|
||||||
|
inner product space. It is defined to equal the cosine of the angle
|
||||||
|
between them. Unlike L2, the cosine distance is not affected by the
|
||||||
|
magnitude of the vectors. Cosine distance has a range of [0, 2].
|
||||||
|
|
||||||
|
"dot" - Dot product. Dot distance is the dot product of two vectors. Dot
|
||||||
|
distance has a range of (-∞, ∞). If the vectors are normalized (i.e. their
|
||||||
|
L2 norm is 1), then dot distance is equivalent to the cosine distance.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### efConstruction?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional efConstruction: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of candidates to evaluate during the construction of the HNSW graph.
|
||||||
|
|
||||||
|
The default value is 300.
|
||||||
|
|
||||||
|
This value controls the tradeoff between build speed and accuracy.
|
||||||
|
The higher the value the more accurate the build but the slower it will be.
|
||||||
|
150 to 300 is the typical range. 100 is a minimum for good quality search
|
||||||
|
results. In most cases, there is no benefit to setting this higher than 500.
|
||||||
|
This value should be set to a value that is not less than `ef` in the search phase.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### m?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional m: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of neighbors to select for each vector in the HNSW graph.
|
||||||
|
|
||||||
|
The default value is 20.
|
||||||
|
|
||||||
|
This value controls the tradeoff between search speed and accuracy.
|
||||||
|
The higher the value the more accurate the search but the slower it will be.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### maxIterations?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional maxIterations: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
Max iterations to train kmeans.
|
||||||
|
|
||||||
|
The default value is 50.
|
||||||
|
|
||||||
|
When training an IVF index we use kmeans to calculate the partitions. This parameter
|
||||||
|
controls how many iterations of kmeans to run.
|
||||||
|
|
||||||
|
Increasing this might improve the quality of the index but in most cases the parameter
|
||||||
|
is unused because kmeans will converge with fewer iterations. The parameter is only
|
||||||
|
used in cases where kmeans does not appear to converge. In those cases it is unlikely
|
||||||
|
that setting this larger will lead to the index converging anyways.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### numPartitions?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional numPartitions: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of IVF partitions to create.
|
||||||
|
|
||||||
|
For HNSW, we recommend a small number of partitions. Setting this to 1 works
|
||||||
|
well for most tables. For very large tables, training just one HNSW graph
|
||||||
|
will require too much memory. Each partition becomes its own HNSW graph, so
|
||||||
|
setting this value higher reduces the peak memory use of training.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### sampleRate?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional sampleRate: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The rate used to calculate the number of training vectors for kmeans.
|
||||||
|
|
||||||
|
Default value is 256.
|
||||||
|
|
||||||
|
When an IVF index is trained, we need to calculate partitions. These are groups
|
||||||
|
of vectors that are similar to each other. To do this we use an algorithm called kmeans.
|
||||||
|
|
||||||
|
Running kmeans on a large dataset can be slow. To speed this up we run kmeans on a
|
||||||
|
random sample of the data. This parameter controls the size of the sample. The total
|
||||||
|
number of vectors used to train the index is `sample_rate * num_partitions`.
|
||||||
|
|
||||||
|
Increasing this value might improve the quality of the index but in most cases the
|
||||||
|
default should be sufficient.
|
||||||
40
docs/src/js/interfaces/OpenTableOptions.md
Normal file
40
docs/src/js/interfaces/OpenTableOptions.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / OpenTableOptions
|
||||||
|
|
||||||
|
# Interface: OpenTableOptions
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### indexCacheSize?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional indexCacheSize: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
Set the size of the index cache, specified as a number of entries
|
||||||
|
|
||||||
|
The exact meaning of an "entry" will depend on the type of index:
|
||||||
|
- IVF: there is one entry for each IVF partition
|
||||||
|
- BTREE: there is one entry for the entire index
|
||||||
|
|
||||||
|
This cache applies to the entire opened table, across all indices.
|
||||||
|
Setting this value higher will increase performance on larger datasets
|
||||||
|
at the expense of more RAM
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### storageOptions?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional storageOptions: Record<string, string>;
|
||||||
|
```
|
||||||
|
|
||||||
|
Configuration for object storage.
|
||||||
|
|
||||||
|
Options already set on the connection will be inherited by the table,
|
||||||
|
but can be overridden here.
|
||||||
|
|
||||||
|
The available options are described at https://lancedb.github.io/lancedb/guides/storage/
|
||||||
29
docs/src/js/interfaces/OptimizeStats.md
Normal file
29
docs/src/js/interfaces/OptimizeStats.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / OptimizeStats
|
||||||
|
|
||||||
|
# Interface: OptimizeStats
|
||||||
|
|
||||||
|
Statistics about an optimize operation
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### compaction
|
||||||
|
|
||||||
|
```ts
|
||||||
|
compaction: CompactionStats;
|
||||||
|
```
|
||||||
|
|
||||||
|
Statistics about the compaction operation
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### prune
|
||||||
|
|
||||||
|
```ts
|
||||||
|
prune: RemovalStats;
|
||||||
|
```
|
||||||
|
|
||||||
|
Statistics about the removal operation
|
||||||
22
docs/src/js/interfaces/QueryExecutionOptions.md
Normal file
22
docs/src/js/interfaces/QueryExecutionOptions.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / QueryExecutionOptions
|
||||||
|
|
||||||
|
# Interface: QueryExecutionOptions
|
||||||
|
|
||||||
|
Options that control the behavior of a particular query execution
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### maxBatchLength?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional maxBatchLength: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The maximum number of rows to return in a single batch
|
||||||
|
|
||||||
|
Batches may have fewer rows if the underlying data is stored
|
||||||
|
in smaller chunks.
|
||||||
29
docs/src/js/interfaces/RemovalStats.md
Normal file
29
docs/src/js/interfaces/RemovalStats.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / RemovalStats
|
||||||
|
|
||||||
|
# Interface: RemovalStats
|
||||||
|
|
||||||
|
Statistics about a cleanup operation
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### bytesRemoved
|
||||||
|
|
||||||
|
```ts
|
||||||
|
bytesRemoved: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of bytes removed
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### oldVersionsRemoved
|
||||||
|
|
||||||
|
```ts
|
||||||
|
oldVersionsRemoved: number;
|
||||||
|
```
|
||||||
|
|
||||||
|
The number of old versions removed
|
||||||
31
docs/src/js/interfaces/Version.md
Normal file
31
docs/src/js/interfaces/Version.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / Version
|
||||||
|
|
||||||
|
# Interface: Version
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### metadata
|
||||||
|
|
||||||
|
```ts
|
||||||
|
metadata: Record<string, string>;
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### timestamp
|
||||||
|
|
||||||
|
```ts
|
||||||
|
timestamp: Date;
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### version
|
||||||
|
|
||||||
|
```ts
|
||||||
|
version: number;
|
||||||
|
```
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
[**@lancedb/lancedb**](../README.md) • **Docs**
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
[@lancedb/lancedb](../globals.md) / WriteOptions
|
|
||||||
|
|
||||||
# Interface: WriteOptions
|
|
||||||
|
|
||||||
Write options when creating a Table.
|
|
||||||
|
|
||||||
## Properties
|
|
||||||
|
|
||||||
### mode?
|
|
||||||
|
|
||||||
```ts
|
|
||||||
optional mode: WriteMode;
|
|
||||||
```
|
|
||||||
|
|
||||||
Write mode for writing to a table.
|
|
||||||
@@ -17,6 +17,14 @@
|
|||||||
### Interfaces
|
### Interfaces
|
||||||
|
|
||||||
- [EmbeddingFunctionConfig](interfaces/EmbeddingFunctionConfig.md)
|
- [EmbeddingFunctionConfig](interfaces/EmbeddingFunctionConfig.md)
|
||||||
|
- [EmbeddingFunctionConstructor](interfaces/EmbeddingFunctionConstructor.md)
|
||||||
|
- [EmbeddingFunctionCreate](interfaces/EmbeddingFunctionCreate.md)
|
||||||
|
- [FieldOptions](interfaces/FieldOptions.md)
|
||||||
|
- [FunctionOptions](interfaces/FunctionOptions.md)
|
||||||
|
|
||||||
|
### Type Aliases
|
||||||
|
|
||||||
|
- [CreateReturnType](type-aliases/CreateReturnType.md)
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,23 @@
|
|||||||
|
|
||||||
An embedding function that automatically creates vector representation for a given column.
|
An embedding function that automatically creates vector representation for a given column.
|
||||||
|
|
||||||
|
It's important subclasses pass the **original** options to the super constructor
|
||||||
|
and then pass those options to `resolveVariables` to resolve any variables before
|
||||||
|
using them.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```ts
|
||||||
|
class MyEmbeddingFunction extends EmbeddingFunction {
|
||||||
|
constructor(options: {model: string, timeout: number}) {
|
||||||
|
super(optionsRaw);
|
||||||
|
const options = this.resolveVariables(optionsRaw);
|
||||||
|
this.model = options.model;
|
||||||
|
this.timeout = options.timeout;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Extended by
|
## Extended by
|
||||||
|
|
||||||
- [`TextEmbeddingFunction`](TextEmbeddingFunction.md)
|
- [`TextEmbeddingFunction`](TextEmbeddingFunction.md)
|
||||||
@@ -16,7 +33,7 @@ An embedding function that automatically creates vector representation for a giv
|
|||||||
|
|
||||||
• **T** = `any`
|
• **T** = `any`
|
||||||
|
|
||||||
• **M** *extends* `FunctionOptions` = `FunctionOptions`
|
• **M** *extends* [`FunctionOptions`](../interfaces/FunctionOptions.md) = [`FunctionOptions`](../interfaces/FunctionOptions.md)
|
||||||
|
|
||||||
## Constructors
|
## Constructors
|
||||||
|
|
||||||
@@ -82,12 +99,33 @@ The datatype of the embeddings
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### getSensitiveKeys()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
protected getSensitiveKeys(): string[]
|
||||||
|
```
|
||||||
|
|
||||||
|
Provide a list of keys in the function options that should be treated as
|
||||||
|
sensitive. If users pass raw values for these keys, they will be rejected.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`string`[]
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### init()?
|
### init()?
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
optional init(): Promise<void>
|
optional init(): Promise<void>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optionally load any resources needed for the embedding function.
|
||||||
|
|
||||||
|
This method is called after the embedding function has been initialized
|
||||||
|
but before any embeddings are computed. It is useful for loading local models
|
||||||
|
or other resources that are needed for the embedding function to work.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`void`>
|
`Promise`<`void`>
|
||||||
@@ -108,6 +146,24 @@ The number of dimensions of the embeddings
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### resolveVariables()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
protected resolveVariables(config): Partial<M>
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply variables to the config.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **config**: `Partial`<`M`>
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Partial`<`M`>
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### sourceField()
|
### sourceField()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -118,53 +174,31 @@ sourceField is used in combination with `LanceSchema` to provide a declarative d
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **optionsOrDatatype**: `DataType`<`Type`, `any`> \| `Partial`<`FieldOptions`<`DataType`<`Type`, `any`>>>
|
* **optionsOrDatatype**: `DataType`<`Type`, `any`> \| `Partial`<[`FieldOptions`](../interfaces/FieldOptions.md)<`DataType`<`Type`, `any`>>>
|
||||||
The options for the field or the datatype
|
The options for the field or the datatype
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>>]
|
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>]
|
||||||
|
|
||||||
#### See
|
#### See
|
||||||
|
|
||||||
lancedb.LanceSchema
|
[LanceSchema](../functions/LanceSchema.md)
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### toJSON()
|
### toJSON()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
abstract toJSON(): Partial<M>
|
toJSON(): Record<string, any>
|
||||||
```
|
```
|
||||||
|
|
||||||
Convert the embedding function to a JSON object
|
Get the original arguments to the constructor, to serialize them so they
|
||||||
It is used to serialize the embedding function to the schema
|
can be used to recreate the embedding function later.
|
||||||
It's important that any object returned by this method contains all the necessary
|
|
||||||
information to recreate the embedding function
|
|
||||||
|
|
||||||
It should return the same object that was passed to the constructor
|
|
||||||
If it does not, the embedding function will not be able to be recreated, or could be recreated incorrectly
|
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Partial`<`M`>
|
`Record`<`string`, `any`>
|
||||||
|
|
||||||
#### Example
|
|
||||||
|
|
||||||
```ts
|
|
||||||
class MyEmbeddingFunction extends EmbeddingFunction {
|
|
||||||
constructor(options: {model: string, timeout: number}) {
|
|
||||||
super();
|
|
||||||
this.model = options.model;
|
|
||||||
this.timeout = options.timeout;
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
return {
|
|
||||||
model: this.model,
|
|
||||||
timeout: this.timeout,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -178,12 +212,13 @@ vectorField is used in combination with `LanceSchema` to provide a declarative d
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **optionsOrDatatype?**: `DataType`<`Type`, `any`> \| `Partial`<`FieldOptions`<`DataType`<`Type`, `any`>>>
|
* **optionsOrDatatype?**: `DataType`<`Type`, `any`> \| `Partial`<[`FieldOptions`](../interfaces/FieldOptions.md)<`DataType`<`Type`, `any`>>>
|
||||||
|
The options for the field
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>>]
|
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>]
|
||||||
|
|
||||||
#### See
|
#### See
|
||||||
|
|
||||||
lancedb.LanceSchema
|
[LanceSchema](../functions/LanceSchema.md)
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Fetch an embedding function by name
|
|||||||
|
|
||||||
#### Type Parameters
|
#### Type Parameters
|
||||||
|
|
||||||
• **T** *extends* [`EmbeddingFunction`](EmbeddingFunction.md)<`unknown`, `FunctionOptions`>
|
• **T** *extends* [`EmbeddingFunction`](EmbeddingFunction.md)<`unknown`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ Fetch an embedding function by name
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`undefined` \| `EmbeddingFunctionCreate`<`T`>
|
`undefined` \| [`EmbeddingFunctionCreate`](../interfaces/EmbeddingFunctionCreate.md)<`T`>
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -80,6 +80,28 @@ getTableMetadata(functions): Map<string, string>
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### getVar()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
getVar(name): undefined | string
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a variable.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **name**: `string`
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`undefined` \| `string`
|
||||||
|
|
||||||
|
#### See
|
||||||
|
|
||||||
|
[setVar](EmbeddingFunctionRegistry.md#setvar)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### length()
|
### length()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -104,7 +126,7 @@ Register an embedding function
|
|||||||
|
|
||||||
#### Type Parameters
|
#### Type Parameters
|
||||||
|
|
||||||
• **T** *extends* `EmbeddingFunctionConstructor`<[`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>> = `EmbeddingFunctionConstructor`<[`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>>
|
• **T** *extends* [`EmbeddingFunctionConstructor`](../interfaces/EmbeddingFunctionConstructor.md)<[`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>> = [`EmbeddingFunctionConstructor`](../interfaces/EmbeddingFunctionConstructor.md)<[`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -145,3 +167,31 @@ reset the registry to the initial state
|
|||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`void`
|
`void`
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### setVar()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
setVar(name, value): void
|
||||||
|
```
|
||||||
|
|
||||||
|
Set a variable. These can be accessed in the embedding function
|
||||||
|
configuration using the syntax `$var:variable_name`. If they are not
|
||||||
|
set, an error will be thrown letting you know which key is unset. If you
|
||||||
|
want to supply a default value, you can add an additional part in the
|
||||||
|
configuration like so: `$var:variable_name:default_value`. Default values
|
||||||
|
can be used for runtime configurations that are not sensitive, such as
|
||||||
|
whether to use a GPU for inference.
|
||||||
|
|
||||||
|
The name must not contain colons. The default value can contain colons.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **name**: `string`
|
||||||
|
|
||||||
|
* **value**: `string`
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`void`
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ an abstract class for implementing embedding functions that take text as input
|
|||||||
|
|
||||||
## Type Parameters
|
## Type Parameters
|
||||||
|
|
||||||
• **M** *extends* `FunctionOptions` = `FunctionOptions`
|
• **M** *extends* [`FunctionOptions`](../interfaces/FunctionOptions.md) = [`FunctionOptions`](../interfaces/FunctionOptions.md)
|
||||||
|
|
||||||
## Constructors
|
## Constructors
|
||||||
|
|
||||||
@@ -114,12 +114,37 @@ abstract generateEmbeddings(texts, ...args): Promise<number[][] | Float32Array[]
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### getSensitiveKeys()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
protected getSensitiveKeys(): string[]
|
||||||
|
```
|
||||||
|
|
||||||
|
Provide a list of keys in the function options that should be treated as
|
||||||
|
sensitive. If users pass raw values for these keys, they will be rejected.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`string`[]
|
||||||
|
|
||||||
|
#### Inherited from
|
||||||
|
|
||||||
|
[`EmbeddingFunction`](EmbeddingFunction.md).[`getSensitiveKeys`](EmbeddingFunction.md#getsensitivekeys)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### init()?
|
### init()?
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
optional init(): Promise<void>
|
optional init(): Promise<void>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optionally load any resources needed for the embedding function.
|
||||||
|
|
||||||
|
This method is called after the embedding function has been initialized
|
||||||
|
but before any embeddings are computed. It is useful for loading local models
|
||||||
|
or other resources that are needed for the embedding function to work.
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Promise`<`void`>
|
`Promise`<`void`>
|
||||||
@@ -148,6 +173,28 @@ The number of dimensions of the embeddings
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
### resolveVariables()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
protected resolveVariables(config): Partial<M>
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply variables to the config.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **config**: `Partial`<`M`>
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Partial`<`M`>
|
||||||
|
|
||||||
|
#### Inherited from
|
||||||
|
|
||||||
|
[`EmbeddingFunction`](EmbeddingFunction.md).[`resolveVariables`](EmbeddingFunction.md#resolvevariables)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
### sourceField()
|
### sourceField()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@@ -158,11 +205,11 @@ sourceField is used in combination with `LanceSchema` to provide a declarative d
|
|||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>>]
|
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>]
|
||||||
|
|
||||||
#### See
|
#### See
|
||||||
|
|
||||||
lancedb.LanceSchema
|
[LanceSchema](../functions/LanceSchema.md)
|
||||||
|
|
||||||
#### Overrides
|
#### Overrides
|
||||||
|
|
||||||
@@ -173,37 +220,15 @@ lancedb.LanceSchema
|
|||||||
### toJSON()
|
### toJSON()
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
abstract toJSON(): Partial<M>
|
toJSON(): Record<string, any>
|
||||||
```
|
```
|
||||||
|
|
||||||
Convert the embedding function to a JSON object
|
Get the original arguments to the constructor, to serialize them so they
|
||||||
It is used to serialize the embedding function to the schema
|
can be used to recreate the embedding function later.
|
||||||
It's important that any object returned by this method contains all the necessary
|
|
||||||
information to recreate the embedding function
|
|
||||||
|
|
||||||
It should return the same object that was passed to the constructor
|
|
||||||
If it does not, the embedding function will not be able to be recreated, or could be recreated incorrectly
|
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
`Partial`<`M`>
|
`Record`<`string`, `any`>
|
||||||
|
|
||||||
#### Example
|
|
||||||
|
|
||||||
```ts
|
|
||||||
class MyEmbeddingFunction extends EmbeddingFunction {
|
|
||||||
constructor(options: {model: string, timeout: number}) {
|
|
||||||
super();
|
|
||||||
this.model = options.model;
|
|
||||||
this.timeout = options.timeout;
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
return {
|
|
||||||
model: this.model,
|
|
||||||
timeout: this.timeout,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Inherited from
|
#### Inherited from
|
||||||
|
|
||||||
@@ -221,15 +246,16 @@ vectorField is used in combination with `LanceSchema` to provide a declarative d
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
* **optionsOrDatatype?**: `DataType`<`Type`, `any`> \| `Partial`<`FieldOptions`<`DataType`<`Type`, `any`>>>
|
* **optionsOrDatatype?**: `DataType`<`Type`, `any`> \| `Partial`<[`FieldOptions`](../interfaces/FieldOptions.md)<`DataType`<`Type`, `any`>>>
|
||||||
|
The options for the field
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, `FunctionOptions`>>]
|
[`DataType`<`Type`, `any`>, `Map`<`string`, [`EmbeddingFunction`](EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>]
|
||||||
|
|
||||||
#### See
|
#### See
|
||||||
|
|
||||||
lancedb.LanceSchema
|
[LanceSchema](../functions/LanceSchema.md)
|
||||||
|
|
||||||
#### Inherited from
|
#### Inherited from
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Create a schema with embedding functions.
|
|||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
* **fields**: `Record`<`string`, `object` \| [`object`, `Map`<`string`, [`EmbeddingFunction`](../classes/EmbeddingFunction.md)<`any`, `FunctionOptions`>>]>
|
* **fields**: `Record`<`string`, `object` \| [`object`, `Map`<`string`, [`EmbeddingFunction`](../classes/EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>]>
|
||||||
|
|
||||||
## Returns
|
## Returns
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ function register(name?): (ctor) => any
|
|||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
|
||||||
* **ctor**: `EmbeddingFunctionConstructor`<[`EmbeddingFunction`](../classes/EmbeddingFunction.md)<`any`, `FunctionOptions`>>
|
* **ctor**: [`EmbeddingFunctionConstructor`](../interfaces/EmbeddingFunctionConstructor.md)<[`EmbeddingFunction`](../classes/EmbeddingFunction.md)<`any`, [`FunctionOptions`](../interfaces/FunctionOptions.md)>>
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[**@lancedb/lancedb**](../../../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../../../globals.md) / [embedding](../README.md) / EmbeddingFunctionConstructor
|
||||||
|
|
||||||
|
# Interface: EmbeddingFunctionConstructor<T>
|
||||||
|
|
||||||
|
## Type Parameters
|
||||||
|
|
||||||
|
• **T** *extends* [`EmbeddingFunction`](../classes/EmbeddingFunction.md) = [`EmbeddingFunction`](../classes/EmbeddingFunction.md)
|
||||||
|
|
||||||
|
## Constructors
|
||||||
|
|
||||||
|
### new EmbeddingFunctionConstructor()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
new EmbeddingFunctionConstructor(modelOptions?): T
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **modelOptions?**: `T`\[`"TOptions"`\]
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`T`
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[**@lancedb/lancedb**](../../../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../../../globals.md) / [embedding](../README.md) / EmbeddingFunctionCreate
|
||||||
|
|
||||||
|
# Interface: EmbeddingFunctionCreate<T>
|
||||||
|
|
||||||
|
## Type Parameters
|
||||||
|
|
||||||
|
• **T** *extends* [`EmbeddingFunction`](../classes/EmbeddingFunction.md)
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### create()
|
||||||
|
|
||||||
|
```ts
|
||||||
|
create(options?): CreateReturnType<T>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
* **options?**: `T`\[`"TOptions"`\]
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
[`CreateReturnType`](../type-aliases/CreateReturnType.md)<`T`>
|
||||||
27
docs/src/js/namespaces/embedding/interfaces/FieldOptions.md
Normal file
27
docs/src/js/namespaces/embedding/interfaces/FieldOptions.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[**@lancedb/lancedb**](../../../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../../../globals.md) / [embedding](../README.md) / FieldOptions
|
||||||
|
|
||||||
|
# Interface: FieldOptions<T>
|
||||||
|
|
||||||
|
## Type Parameters
|
||||||
|
|
||||||
|
• **T** *extends* `DataType` = `DataType`
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
### datatype
|
||||||
|
|
||||||
|
```ts
|
||||||
|
datatype: T;
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### dims?
|
||||||
|
|
||||||
|
```ts
|
||||||
|
optional dims: number;
|
||||||
|
```
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[**@lancedb/lancedb**](../../../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../../../globals.md) / [embedding](../README.md) / FunctionOptions
|
||||||
|
|
||||||
|
# Interface: FunctionOptions
|
||||||
|
|
||||||
|
Options for a given embedding function
|
||||||
|
|
||||||
|
## Indexable
|
||||||
|
|
||||||
|
\[`key`: `string`\]: `any`
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[**@lancedb/lancedb**](../../../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../../../globals.md) / [embedding](../README.md) / CreateReturnType
|
||||||
|
|
||||||
|
# Type Alias: CreateReturnType<T>
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type CreateReturnType<T>: T extends object ? Promise<T> : T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Type Parameters
|
||||||
|
|
||||||
|
• **T**
|
||||||
@@ -8,24 +8,6 @@
|
|||||||
|
|
||||||
Reranks the results using the Reciprocal Rank Fusion (RRF) algorithm.
|
Reranks the results using the Reciprocal Rank Fusion (RRF) algorithm.
|
||||||
|
|
||||||
Internally this uses the Rust implementation
|
|
||||||
|
|
||||||
## Constructors
|
|
||||||
|
|
||||||
### new RRFReranker()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new RRFReranker(inner): RRFReranker
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
* **inner**: `RrfReranker`
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
[`RRFReranker`](RRFReranker.md)
|
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
### rerankHybrid()
|
### rerankHybrid()
|
||||||
|
|||||||
11
docs/src/js/type-aliases/DataLike.md
Normal file
11
docs/src/js/type-aliases/DataLike.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / DataLike
|
||||||
|
|
||||||
|
# Type Alias: DataLike
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type DataLike: Data | object;
|
||||||
|
```
|
||||||
11
docs/src/js/type-aliases/FieldLike.md
Normal file
11
docs/src/js/type-aliases/FieldLike.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / FieldLike
|
||||||
|
|
||||||
|
# Type Alias: FieldLike
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type FieldLike: Field | object;
|
||||||
|
```
|
||||||
19
docs/src/js/type-aliases/IntoSql.md
Normal file
19
docs/src/js/type-aliases/IntoSql.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / IntoSql
|
||||||
|
|
||||||
|
# Type Alias: IntoSql
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type IntoSql:
|
||||||
|
| string
|
||||||
|
| number
|
||||||
|
| boolean
|
||||||
|
| null
|
||||||
|
| Date
|
||||||
|
| ArrayBufferLike
|
||||||
|
| Buffer
|
||||||
|
| IntoSql[];
|
||||||
|
```
|
||||||
11
docs/src/js/type-aliases/IntoVector.md
Normal file
11
docs/src/js/type-aliases/IntoVector.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / IntoVector
|
||||||
|
|
||||||
|
# Type Alias: IntoVector
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type IntoVector: Float32Array | Float64Array | number[] | Promise<Float32Array | Float64Array | number[]>;
|
||||||
|
```
|
||||||
11
docs/src/js/type-aliases/RecordBatchLike.md
Normal file
11
docs/src/js/type-aliases/RecordBatchLike.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / RecordBatchLike
|
||||||
|
|
||||||
|
# Type Alias: RecordBatchLike
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type RecordBatchLike: RecordBatch | object;
|
||||||
|
```
|
||||||
11
docs/src/js/type-aliases/SchemaLike.md
Normal file
11
docs/src/js/type-aliases/SchemaLike.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / SchemaLike
|
||||||
|
|
||||||
|
# Type Alias: SchemaLike
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type SchemaLike: Schema | object;
|
||||||
|
```
|
||||||
11
docs/src/js/type-aliases/TableLike.md
Normal file
11
docs/src/js/type-aliases/TableLike.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[**@lancedb/lancedb**](../README.md) • **Docs**
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
[@lancedb/lancedb](../globals.md) / TableLike
|
||||||
|
|
||||||
|
# Type Alias: TableLike
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type TableLike: ArrowTable | object;
|
||||||
|
```
|
||||||
@@ -1,17 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
#
|
#
|
||||||
# Copyright 2023 LanceDB 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.
|
|
||||||
|
|
||||||
"""Dataset hf://poloclub/diffusiondb
|
"""Dataset hf://poloclub/diffusiondb
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -9,24 +9,51 @@ LanceDB supports [Polars](https://github.com/pola-rs/polars), a blazingly fast D
|
|||||||
|
|
||||||
First, we connect to a LanceDB database.
|
First, we connect to a LanceDB database.
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```py
|
```py
|
||||||
--8<-- "python/python/tests/docs/test_python.py:import-lancedb"
|
--8<-- "python/python/tests/docs/test_python.py:import-lancedb"
|
||||||
--8<-- "python/python/tests/docs/test_python.py:connect_to_lancedb"
|
--8<-- "python/python/tests/docs/test_python.py:connect_to_lancedb"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```py
|
||||||
|
--8<-- "python/python/tests/docs/test_python.py:import-lancedb"
|
||||||
|
--8<-- "python/python/tests/docs/test_python.py:connect_to_lancedb_async"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
We can load a Polars `DataFrame` to LanceDB directly.
|
We can load a Polars `DataFrame` to LanceDB directly.
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```py
|
```py
|
||||||
--8<-- "python/python/tests/docs/test_python.py:import-polars"
|
--8<-- "python/python/tests/docs/test_python.py:import-polars"
|
||||||
--8<-- "python/python/tests/docs/test_python.py:create_table_polars"
|
--8<-- "python/python/tests/docs/test_python.py:create_table_polars"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```py
|
||||||
|
--8<-- "python/python/tests/docs/test_python.py:import-polars"
|
||||||
|
--8<-- "python/python/tests/docs/test_python.py:create_table_polars_async"
|
||||||
|
```
|
||||||
|
|
||||||
We can now perform similarity search via the LanceDB Python API.
|
We can now perform similarity search via the LanceDB Python API.
|
||||||
|
|
||||||
|
=== "Sync API"
|
||||||
|
|
||||||
```py
|
```py
|
||||||
--8<-- "python/python/tests/docs/test_python.py:vector_search_polars"
|
--8<-- "python/python/tests/docs/test_python.py:vector_search_polars"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=== "Async API"
|
||||||
|
|
||||||
|
```py
|
||||||
|
--8<-- "python/python/tests/docs/test_python.py:vector_search_polars_async"
|
||||||
|
```
|
||||||
|
|
||||||
In addition to the selected columns, LanceDB also returns a vector
|
In addition to the selected columns, LanceDB also returns a vector
|
||||||
and also the `_distance` column which is the distance between the query
|
and also the `_distance` column which is the distance between the query
|
||||||
vector and the returned vector.
|
vector and the returned vector.
|
||||||
@@ -112,4 +139,3 @@ The reason it's beneficial to not convert the LanceDB Table
|
|||||||
to a DataFrame is because the table can potentially be way larger
|
to a DataFrame is because the table can potentially be way larger
|
||||||
than memory, and Polars LazyFrames allow us to work with such
|
than memory, and Polars LazyFrames allow us to work with such
|
||||||
larger-than-memory datasets by not loading it into memory all at once.
|
larger-than-memory datasets by not loading it into memory all at once.
|
||||||
|
|
||||||
|
|||||||
@@ -2,14 +2,19 @@
|
|||||||
|
|
||||||
[Pydantic](https://docs.pydantic.dev/latest/) is a data validation library in Python.
|
[Pydantic](https://docs.pydantic.dev/latest/) is a data validation library in Python.
|
||||||
LanceDB integrates with Pydantic for schema inference, data ingestion, and query result casting.
|
LanceDB integrates with Pydantic for schema inference, data ingestion, and query result casting.
|
||||||
|
Using [LanceModel][lancedb.pydantic.LanceModel], users can seamlessly
|
||||||
|
integrate Pydantic with the rest of the LanceDB APIs.
|
||||||
|
|
||||||
## Schema
|
```python
|
||||||
|
|
||||||
LanceDB supports to create Apache Arrow Schema from a
|
--8<-- "python/python/tests/docs/test_pydantic_integration.py:imports"
|
||||||
[Pydantic BaseModel](https://docs.pydantic.dev/latest/api/main/#pydantic.main.BaseModel)
|
|
||||||
via [pydantic_to_schema()](python.md#lancedb.pydantic.pydantic_to_schema) method.
|
--8<-- "python/python/tests/docs/test_pydantic_integration.py:base_model"
|
||||||
|
|
||||||
|
--8<-- "python/python/tests/docs/test_pydantic_integration.py:set_url"
|
||||||
|
--8<-- "python/python/tests/docs/test_pydantic_integration.py:base_example"
|
||||||
|
```
|
||||||
|
|
||||||
::: lancedb.pydantic.pydantic_to_schema
|
|
||||||
|
|
||||||
## Vector Field
|
## Vector Field
|
||||||
|
|
||||||
@@ -34,3 +39,9 @@ Current supported type conversions:
|
|||||||
| `list` | `pyarrow.List` |
|
| `list` | `pyarrow.List` |
|
||||||
| `BaseModel` | `pyarrow.Struct` |
|
| `BaseModel` | `pyarrow.Struct` |
|
||||||
| `Vector(n)` | `pyarrow.FixedSizeList(float32, n)` |
|
| `Vector(n)` | `pyarrow.FixedSizeList(float32, n)` |
|
||||||
|
|
||||||
|
LanceDB supports to create Apache Arrow Schema from a
|
||||||
|
[Pydantic BaseModel][pydantic.BaseModel]
|
||||||
|
via [pydantic_to_schema()](python.md#lancedb.pydantic.pydantic_to_schema) method.
|
||||||
|
|
||||||
|
::: lancedb.pydantic.pydantic_to_schema
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ LanceDB supports binary vectors as a data type, and has the ability to search bi
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
=== "sync API"
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_binary_vector.py:imports"
|
--8<-- "python/python/tests/docs/test_binary_vector.py:imports"
|
||||||
@@ -130,7 +130,7 @@ LanceDB supports binary vectors as a data type, and has the ability to search bi
|
|||||||
--8<-- "python/python/tests/docs/test_binary_vector.py:sync_binary_vector"
|
--8<-- "python/python/tests/docs/test_binary_vector.py:sync_binary_vector"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "async API"
|
=== "Async API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_binary_vector.py:imports"
|
--8<-- "python/python/tests/docs/test_binary_vector.py:imports"
|
||||||
@@ -153,7 +153,7 @@ The vector value type can be `float16`, `float32` or `float64`.
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
=== "sync API"
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_multivector.py:imports"
|
--8<-- "python/python/tests/docs/test_multivector.py:imports"
|
||||||
@@ -161,7 +161,7 @@ The vector value type can be `float16`, `float32` or `float64`.
|
|||||||
--8<-- "python/python/tests/docs/test_multivector.py:sync_multivector"
|
--8<-- "python/python/tests/docs/test_multivector.py:sync_multivector"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "async API"
|
=== "Async API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_multivector.py:imports"
|
--8<-- "python/python/tests/docs/test_multivector.py:imports"
|
||||||
@@ -175,7 +175,7 @@ You can also search for vectors within a specific distance range from the query
|
|||||||
|
|
||||||
=== "Python"
|
=== "Python"
|
||||||
|
|
||||||
=== "sync API"
|
=== "Sync API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_distance_range.py:imports"
|
--8<-- "python/python/tests/docs/test_distance_range.py:imports"
|
||||||
@@ -183,7 +183,7 @@ You can also search for vectors within a specific distance range from the query
|
|||||||
--8<-- "python/python/tests/docs/test_distance_range.py:sync_distance_range"
|
--8<-- "python/python/tests/docs/test_distance_range.py:sync_distance_range"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "async API"
|
=== "Async API"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
--8<-- "python/python/tests/docs/test_distance_range.py:imports"
|
--8<-- "python/python/tests/docs/test_distance_range.py:imports"
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ async function setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async () => {
|
async () => {
|
||||||
|
console.log("search_legacy.ts: start");
|
||||||
await setup();
|
await setup();
|
||||||
|
|
||||||
// --8<-- [start:search1]
|
// --8<-- [start:search1]
|
||||||
@@ -37,5 +38,5 @@ async () => {
|
|||||||
.execute();
|
.execute();
|
||||||
// --8<-- [end:search2]
|
// --8<-- [end:search2]
|
||||||
|
|
||||||
console.log("search: done");
|
console.log("search_legacy.ts: done");
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ const tbl = await db.createTable('myVectors', data)
|
|||||||
```ts
|
```ts
|
||||||
--8<-- "docs/src/sql_legacy.ts:search"
|
--8<-- "docs/src/sql_legacy.ts:search"
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
|
|
||||||
Creating a [scalar index](guides/scalar_index.md) accelerates filtering.
|
Creating a [scalar index](guides/scalar_index.md) accelerates filtering.
|
||||||
@@ -118,14 +119,14 @@ For example, the following filter string is acceptable:
|
|||||||
--8<-- "docs/src/sql_legacy.ts:vec_search"
|
--8<-- "docs/src/sql_legacy.ts:vec_search"
|
||||||
```
|
```
|
||||||
|
|
||||||
If your column name contains special characters or is a [SQL Keyword](https://docs.rs/sqlparser/latest/sqlparser/keywords/index.html),
|
If your column name contains special characters, upper-case characters, or is a [SQL Keyword](https://docs.rs/sqlparser/latest/sqlparser/keywords/index.html),
|
||||||
you can use backtick (`` ` ``) to escape it. For nested fields, each segment of the
|
you can use backtick (`` ` ``) to escape it. For nested fields, each segment of the
|
||||||
path must be wrapped in backticks.
|
path must be wrapped in backticks.
|
||||||
|
|
||||||
=== "SQL"
|
=== "SQL"
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
`CUBE` = 10 AND `column name with space` IS NOT NULL
|
`CUBE` = 10 AND `UpperCaseName` = '3' AND `column name with space` IS NOT NULL
|
||||||
AND `nested with space`.`inner with space` < 2
|
AND `nested with space`.`inner with space` < 2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as vectordb from "vectordb";
|
import * as vectordb from "vectordb";
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
|
console.log("sql_legacy.ts: start");
|
||||||
const db = await vectordb.connect("data/sample-lancedb");
|
const db = await vectordb.connect("data/sample-lancedb");
|
||||||
|
|
||||||
let data = [];
|
let data = [];
|
||||||
@@ -34,5 +35,5 @@ import * as vectordb from "vectordb";
|
|||||||
await tbl.filter("id = 10").limit(10).execute();
|
await tbl.filter("id = 10").limit(10).execute();
|
||||||
// --8<-- [end:sql_search]
|
// --8<-- [end:sql_search]
|
||||||
|
|
||||||
console.log("SQL search: done");
|
console.log("sql_legacy.ts: done");
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ excluded_globs = [
|
|||||||
"../src/examples/*.md",
|
"../src/examples/*.md",
|
||||||
"../src/integrations/*.md",
|
"../src/integrations/*.md",
|
||||||
"../src/guides/tables.md",
|
"../src/guides/tables.md",
|
||||||
|
"../src/guides/tables/merge_insert.md",
|
||||||
"../src/python/duckdb.md",
|
"../src/python/duckdb.md",
|
||||||
"../src/python/pandas_and_pyarrow.md",
|
"../src/python/pandas_and_pyarrow.md",
|
||||||
"../src/python/polars_arrow.md",
|
"../src/python/polars_arrow.md",
|
||||||
|
"../src/python/pydantic.md",
|
||||||
"../src/embeddings/*.md",
|
"../src/embeddings/*.md",
|
||||||
"../src/concepts/*.md",
|
"../src/concepts/*.md",
|
||||||
"../src/ann_indexes.md",
|
"../src/ann_indexes.md",
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
use crate::ffi::JNIEnvExt;
|
use crate::ffi::JNIEnvExt;
|
||||||
use crate::traits::IntoJava;
|
use crate::traits::IntoJava;
|
||||||
use crate::{Error, RT};
|
use crate::{Error, RT};
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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.
|
|
||||||
|
|
||||||
use std::str::Utf8Error;
|
use std::str::Utf8Error;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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.
|
|
||||||
|
|
||||||
use core::slice;
|
use core::slice;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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.
|
|
||||||
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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.
|
|
||||||
|
|
||||||
use jni::objects::{JMap, JObject, JString, JValue};
|
use jni::objects::{JMap, JObject, JString, JValue};
|
||||||
use jni::JNIEnv;
|
use jni::JNIEnv;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.15.1-beta.0</version>
|
<version>0.16.1-beta.3</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
/*
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lancedb.lancedb;
|
package com.lancedb.lancedb;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
/*
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
package com.lancedb.lancedb;
|
package com.lancedb.lancedb;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|||||||
4
java/license_header.txt
Normal file
4
java/license_header.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
* SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
*/
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.15.1-beta.0</version>
|
<version>0.16.1-beta.3</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>LanceDB Parent</name>
|
<name>LanceDB Parent</name>
|
||||||
|
|||||||
124
node/package-lock.json
generated
124
node/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "vectordb",
|
"name": "vectordb",
|
||||||
"version": "0.15.1-beta.0",
|
"version": "0.16.1-beta.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "vectordb",
|
"name": "vectordb",
|
||||||
"version": "0.15.1-beta.0",
|
"version": "0.16.1-beta.3",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64",
|
"x64",
|
||||||
"arm64"
|
"arm64"
|
||||||
@@ -52,14 +52,14 @@
|
|||||||
"uuid": "^9.0.0"
|
"uuid": "^9.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@lancedb/vectordb-darwin-arm64": "0.15.1-beta.0",
|
"@lancedb/vectordb-darwin-arm64": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-darwin-x64": "0.15.1-beta.0",
|
"@lancedb/vectordb-darwin-x64": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-arm64-gnu": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-arm64-gnu": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-arm64-musl": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-arm64-musl": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-x64-gnu": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-x64-gnu": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-x64-musl": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-x64-musl": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-win32-arm64-msvc": "0.15.1-beta.0",
|
"@lancedb/vectordb-win32-arm64-msvc": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-win32-x64-msvc": "0.15.1-beta.0"
|
"@lancedb/vectordb-win32-x64-msvc": "0.16.1-beta.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@apache-arrow/ts": "^14.0.2",
|
"@apache-arrow/ts": "^14.0.2",
|
||||||
@@ -329,6 +329,110 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-darwin-arm64": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-darwin-arm64/-/vectordb-darwin-arm64-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-k2dfDNvoFjZuF8RCkFX9yFkLIg292mFg+o6IUeXndlikhABi8F+NbRODGUxJf3QUioks2tGF831KFoV5oQyeEA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-darwin-x64": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-darwin-x64/-/vectordb-darwin-x64-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-pYvwcAXBB3MXxa2kvK8PxMoEsaE+EFld5pky6dDo6qJQVepUz9pi/e1FTLxW6m0mgwtRj52P6xe55sj1Yln9Qw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-linux-arm64-gnu": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-arm64-gnu/-/vectordb-linux-arm64-gnu-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-BS4rnBtKGJlEdbYgOe85mGhviQaSfEXl8qw0fh0ml8E0qbi5RuLtwfTFMe3yAKSOnNAvaJISqXQyUN7hzkYkUQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-linux-arm64-musl": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-arm64-musl/-/vectordb-linux-arm64-musl-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-/F1mzpgSipfXjeaXJx5c0zLPOipPKnSPIpYviSdLU2Ahm1aHLweW1UsoiUoRkBkvEcVrZfHxL64vasey2I0P7Q==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-linux-x64-gnu": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-x64-gnu/-/vectordb-linux-x64-gnu-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-zGn2Oby8GAQYG7+dqFVi2DDzli2/GAAY7lwPoYbPlyVytcdTlXRsxea1XiT1jzZmyKIlrxA/XXSRsmRq4n1j1w==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-linux-x64-musl": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-x64-musl/-/vectordb-linux-x64-musl-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-MXYvI7dL+0QtWGDuliUUaEp/XQN+hSndtDc8wlAMyI0lOzmTvC7/C3OZQcMKf6JISZuNS71OVzVTYDYSab9aXw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-win32-arm64-msvc": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-win32-arm64-msvc/-/vectordb-win32-arm64-msvc-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-1dbUSg+Mi+0W8JAUXqNWC+uCr0RUqVHhxFVGLSlprqZ8qFJYQ61jFSZr4onOYj9Ta1n6tUb3Nc4acxf3vXXPmw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lancedb/vectordb-win32-x64-msvc": {
|
||||||
|
"version": "0.16.1-beta.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lancedb/vectordb-win32-x64-msvc/-/vectordb-win32-x64-msvc-0.16.1-beta.3.tgz",
|
||||||
|
"integrity": "sha512-K9oT47zKnFoCEB/JjVKG+w+L0GOMDsPPln+B2TvefAXAWrvweCN2H4LUdsBYCTnntzy80OJCwwH3OwX07M1Y3g==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@neon-rs/cli": {
|
"node_modules/@neon-rs/cli": {
|
||||||
"version": "0.0.160",
|
"version": "0.0.160",
|
||||||
"resolved": "https://registry.npmjs.org/@neon-rs/cli/-/cli-0.0.160.tgz",
|
"resolved": "https://registry.npmjs.org/@neon-rs/cli/-/cli-0.0.160.tgz",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vectordb",
|
"name": "vectordb",
|
||||||
"version": "0.15.1-beta.0",
|
"version": "0.16.1-beta.3",
|
||||||
"description": " Serverless, low-latency vector database for AI applications",
|
"description": " Serverless, low-latency vector database for AI applications",
|
||||||
"private": false,
|
"private": false,
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@@ -92,13 +92,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@lancedb/vectordb-darwin-x64": "0.15.1-beta.0",
|
"@lancedb/vectordb-darwin-x64": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-darwin-arm64": "0.15.1-beta.0",
|
"@lancedb/vectordb-darwin-arm64": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-x64-gnu": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-x64-gnu": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-arm64-gnu": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-arm64-gnu": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-x64-musl": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-x64-musl": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-linux-arm64-musl": "0.15.1-beta.0",
|
"@lancedb/vectordb-linux-arm64-musl": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-win32-x64-msvc": "0.15.1-beta.0",
|
"@lancedb/vectordb-win32-x64-msvc": "0.16.1-beta.3",
|
||||||
"@lancedb/vectordb-win32-arm64-msvc": "0.15.1-beta.0"
|
"@lancedb/vectordb-win32-arm64-msvc": "0.16.1-beta.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,8 @@ const {
|
|||||||
tableSchema,
|
tableSchema,
|
||||||
tableAddColumns,
|
tableAddColumns,
|
||||||
tableAlterColumns,
|
tableAlterColumns,
|
||||||
tableDropColumns
|
tableDropColumns,
|
||||||
|
tableDropIndex
|
||||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
} = require("../native.js");
|
} = require("../native.js");
|
||||||
|
|
||||||
@@ -604,6 +605,13 @@ export interface Table<T = number[]> {
|
|||||||
*/
|
*/
|
||||||
dropColumns(columnNames: string[]): Promise<void>
|
dropColumns(columnNames: string[]): Promise<void>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drop an index from the table
|
||||||
|
*
|
||||||
|
* @param indexName The name of the index to drop
|
||||||
|
*/
|
||||||
|
dropIndex(indexName: string): Promise<void>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrument the behavior of this Table with middleware.
|
* Instrument the behavior of this Table with middleware.
|
||||||
*
|
*
|
||||||
@@ -1206,6 +1214,10 @@ export class LocalTable<T = number[]> implements Table<T> {
|
|||||||
return tableDropColumns.call(this._tbl, columnNames);
|
return tableDropColumns.call(this._tbl, columnNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async dropIndex(indexName: string): Promise<void> {
|
||||||
|
return tableDropIndex.call(this._tbl, indexName);
|
||||||
|
}
|
||||||
|
|
||||||
withMiddleware(middleware: HttpMiddleware): Table<T> {
|
withMiddleware(middleware: HttpMiddleware): Table<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -471,6 +471,18 @@ export class RemoteTable<T = number[]> implements Table<T> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async dropIndex (index_name: string): Promise<void> {
|
||||||
|
const res = await this._client.post(
|
||||||
|
`/v1/table/${encodeURIComponent(this._name)}/index/${encodeURIComponent(index_name)}/drop/`
|
||||||
|
)
|
||||||
|
if (res.status !== 200) {
|
||||||
|
throw new Error(
|
||||||
|
`Server Error, status: ${res.status}, ` +
|
||||||
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
||||||
|
`message: ${res.statusText}: ${await res.body()}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async countRows (filter?: string): Promise<number> {
|
async countRows (filter?: string): Promise<number> {
|
||||||
const result = await this._client.post(`/v1/table/${encodeURIComponent(this._name)}/count_rows/`, {
|
const result = await this._client.post(`/v1/table/${encodeURIComponent(this._name)}/count_rows/`, {
|
||||||
|
|||||||
@@ -894,6 +894,27 @@ describe("LanceDB client", function () {
|
|||||||
expect(stats.distanceType).to.equal("l2");
|
expect(stats.distanceType).to.equal("l2");
|
||||||
expect(stats.numIndices).to.equal(1);
|
expect(stats.numIndices).to.equal(1);
|
||||||
}).timeout(50_000);
|
}).timeout(50_000);
|
||||||
|
|
||||||
|
// not yet implemented
|
||||||
|
// it("can drop index", async function () {
|
||||||
|
// const uri = await createTestDB(32, 300);
|
||||||
|
// const con = await lancedb.connect(uri);
|
||||||
|
// const table = await con.openTable("vectors");
|
||||||
|
// await table.createIndex({
|
||||||
|
// type: "ivf_pq",
|
||||||
|
// column: "vector",
|
||||||
|
// num_partitions: 2,
|
||||||
|
// max_iters: 2,
|
||||||
|
// num_sub_vectors: 2
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// const indices = await table.listIndices();
|
||||||
|
// expect(indices).to.have.lengthOf(1);
|
||||||
|
// expect(indices[0].name).to.equal("vector_idx");
|
||||||
|
//
|
||||||
|
// await table.dropIndex("vector_idx");
|
||||||
|
// expect(await table.listIndices()).to.have.lengthOf(0);
|
||||||
|
// }).timeout(50_000);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when using a custom embedding function", function () {
|
describe("when using a custom embedding function", function () {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb-nodejs"
|
name = "lancedb-nodejs"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
version = "0.15.1-beta.0"
|
version = "0.16.1-beta.3"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
description.workspace = true
|
description.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const results = await table.vectorSearch([0.1, 0.3]).limit(20).toArray();
|
|||||||
console.log(results);
|
console.log(results);
|
||||||
```
|
```
|
||||||
|
|
||||||
The [quickstart](../basic.md) contains a more complete example.
|
The [quickstart](https://lancedb.github.io/lancedb/basic/) contains a more complete example.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,7 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
import { Schema } from "apache-arrow";
|
import { Schema } from "apache-arrow";
|
||||||
// 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 * as arrow15 from "apache-arrow-15";
|
import * as arrow15 from "apache-arrow-15";
|
||||||
import * as arrow16 from "apache-arrow-16";
|
import * as arrow16 from "apache-arrow-16";
|
||||||
@@ -65,6 +55,7 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
Float64,
|
Float64,
|
||||||
Struct,
|
Struct,
|
||||||
List,
|
List,
|
||||||
|
Int16,
|
||||||
Int32,
|
Int32,
|
||||||
Int64,
|
Int64,
|
||||||
Float,
|
Float,
|
||||||
@@ -118,13 +109,16 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
false,
|
false,
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const table = (await tableCreationMethod(
|
const table = (await tableCreationMethod(
|
||||||
records,
|
records,
|
||||||
recordsReversed,
|
recordsReversed,
|
||||||
schema,
|
schema,
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
)) as any;
|
)) as any;
|
||||||
|
|
||||||
|
// We expect deterministic ordering of the fields
|
||||||
|
expect(table.schema.names).toEqual(schema.names);
|
||||||
|
|
||||||
schema.fields.forEach(
|
schema.fields.forEach(
|
||||||
(
|
(
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
@@ -151,13 +145,13 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
describe("The function makeArrowTable", function () {
|
describe("The function makeArrowTable", function () {
|
||||||
it("will use data types from a provided schema instead of inference", async function () {
|
it("will use data types from a provided schema instead of inference", async function () {
|
||||||
const schema = new Schema([
|
const schema = new Schema([
|
||||||
new Field("a", new Int32()),
|
new Field("a", new Int32(), false),
|
||||||
new Field("b", new Float32()),
|
new Field("b", new Float32(), true),
|
||||||
new Field(
|
new Field(
|
||||||
"c",
|
"c",
|
||||||
new FixedSizeList(3, new Field("item", new Float16())),
|
new FixedSizeList(3, new Field("item", new Float16())),
|
||||||
),
|
),
|
||||||
new Field("d", new Int64()),
|
new Field("d", new Int64(), true),
|
||||||
]);
|
]);
|
||||||
const table = makeArrowTable(
|
const table = makeArrowTable(
|
||||||
[
|
[
|
||||||
@@ -175,12 +169,15 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
expect(actual.numRows).toBe(3);
|
expect(actual.numRows).toBe(3);
|
||||||
const actualSchema = actual.schema;
|
const actualSchema = actual.schema;
|
||||||
expect(actualSchema).toEqual(schema);
|
expect(actualSchema).toEqual(schema);
|
||||||
|
expect(table.getChild("a")?.toJSON()).toEqual([1, 4, 7]);
|
||||||
|
expect(table.getChild("b")?.toJSON()).toEqual([2, 5, 8]);
|
||||||
|
expect(table.getChild("d")?.toJSON()).toEqual([9n, 10n, null]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("will assume the column `vector` is FixedSizeList<Float32> by default", async function () {
|
it("will assume the column `vector` is FixedSizeList<Float32> by default", async function () {
|
||||||
const schema = new Schema([
|
const schema = new Schema([
|
||||||
new Field("a", new Float(Precision.DOUBLE), true),
|
new Field("a", new Float(Precision.DOUBLE), true),
|
||||||
new Field("b", new Float(Precision.DOUBLE), true),
|
new Field("b", new Int64(), true),
|
||||||
new Field(
|
new Field(
|
||||||
"vector",
|
"vector",
|
||||||
new FixedSizeList(
|
new FixedSizeList(
|
||||||
@@ -191,9 +188,9 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
const table = makeArrowTable([
|
const table = makeArrowTable([
|
||||||
{ a: 1, b: 2, vector: [1, 2, 3] },
|
{ a: 1, b: 2n, vector: [1, 2, 3] },
|
||||||
{ a: 4, b: 5, vector: [4, 5, 6] },
|
{ a: 4, b: 5n, vector: [4, 5, 6] },
|
||||||
{ a: 7, b: 8, vector: [7, 8, 9] },
|
{ a: 7, b: 8n, vector: [7, 8, 9] },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const buf = await fromTableToBuffer(table);
|
const buf = await fromTableToBuffer(table);
|
||||||
@@ -203,6 +200,19 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
expect(actual.numRows).toBe(3);
|
expect(actual.numRows).toBe(3);
|
||||||
const actualSchema = actual.schema;
|
const actualSchema = actual.schema;
|
||||||
expect(actualSchema).toEqual(schema);
|
expect(actualSchema).toEqual(schema);
|
||||||
|
|
||||||
|
expect(table.getChild("a")?.toJSON()).toEqual([1, 4, 7]);
|
||||||
|
expect(table.getChild("b")?.toJSON()).toEqual([2n, 5n, 8n]);
|
||||||
|
expect(
|
||||||
|
table
|
||||||
|
.getChild("vector")
|
||||||
|
?.toJSON()
|
||||||
|
.map((v) => v.toJSON()),
|
||||||
|
).toEqual([
|
||||||
|
[1, 2, 3],
|
||||||
|
[4, 5, 6],
|
||||||
|
[7, 8, 9],
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("can support multiple vector columns", async function () {
|
it("can support multiple vector columns", async function () {
|
||||||
@@ -216,7 +226,7 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
),
|
),
|
||||||
new Field(
|
new Field(
|
||||||
"vec2",
|
"vec2",
|
||||||
new FixedSizeList(3, new Field("item", new Float16(), true)),
|
new FixedSizeList(3, new Field("item", new Float64(), true)),
|
||||||
true,
|
true,
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
@@ -229,7 +239,7 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
{
|
{
|
||||||
vectorColumns: {
|
vectorColumns: {
|
||||||
vec1: { type: new Float16() },
|
vec1: { type: new Float16() },
|
||||||
vec2: { type: new Float16() },
|
vec2: { type: new Float64() },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -317,6 +327,53 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("will allow subsets of columns if nullable", async function () {
|
||||||
|
const schema = new Schema([
|
||||||
|
new Field("a", new Int64(), true),
|
||||||
|
new Field(
|
||||||
|
"s",
|
||||||
|
new Struct([
|
||||||
|
new Field("x", new Int32(), true),
|
||||||
|
new Field("y", new Int32(), true),
|
||||||
|
]),
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
new Field("d", new Int16(), true),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const table = makeArrowTable([{ a: 1n }], { schema });
|
||||||
|
expect(table.numCols).toBe(1);
|
||||||
|
expect(table.numRows).toBe(1);
|
||||||
|
|
||||||
|
const table2 = makeArrowTable([{ a: 1n, d: 2 }], { schema });
|
||||||
|
expect(table2.numCols).toBe(2);
|
||||||
|
|
||||||
|
const table3 = makeArrowTable([{ s: { y: 3 } }], { schema });
|
||||||
|
expect(table3.numCols).toBe(1);
|
||||||
|
const expectedSchema = new Schema([
|
||||||
|
new Field("s", new Struct([new Field("y", new Int32(), true)]), true),
|
||||||
|
]);
|
||||||
|
expect(table3.schema).toEqual(expectedSchema);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("will work even if columns are sparsely provided", async function () {
|
||||||
|
const sparseRecords = [{ a: 1n }, { b: 2n }, { c: 3n }, { d: 4n }];
|
||||||
|
const table = makeArrowTable(sparseRecords);
|
||||||
|
expect(table.numCols).toBe(4);
|
||||||
|
expect(table.numRows).toBe(4);
|
||||||
|
|
||||||
|
const schema = new Schema([
|
||||||
|
new Field("a", new Int64(), true),
|
||||||
|
new Field("b", new Int32(), true),
|
||||||
|
new Field("c", new Int64(), true),
|
||||||
|
new Field("d", new Int16(), true),
|
||||||
|
]);
|
||||||
|
const table2 = makeArrowTable(sparseRecords, { schema });
|
||||||
|
expect(table2.numCols).toBe(4);
|
||||||
|
expect(table2.numRows).toBe(4);
|
||||||
|
expect(table2.schema).toEqual(schema);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
class DummyEmbedding extends EmbeddingFunction<string> {
|
class DummyEmbedding extends EmbeddingFunction<string> {
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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 { readdirSync } from "fs";
|
import { readdirSync } from "fs";
|
||||||
import { Field, Float64, Schema } from "apache-arrow";
|
import { Field, Float64, Schema } from "apache-arrow";
|
||||||
@@ -28,14 +17,14 @@ describe("when connecting", () => {
|
|||||||
it("should connect", async () => {
|
it("should connect", async () => {
|
||||||
const db = await connect(tmpDir.name);
|
const db = await connect(tmpDir.name);
|
||||||
expect(db.display()).toBe(
|
expect(db.display()).toBe(
|
||||||
`NativeDatabase(uri=${tmpDir.name}, read_consistency_interval=None)`,
|
`ListingDatabase(uri=${tmpDir.name}, read_consistency_interval=None)`,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should allow read consistency interval to be specified", async () => {
|
it("should allow read consistency interval to be specified", async () => {
|
||||||
const db = await connect(tmpDir.name, { readConsistencyInterval: 5 });
|
const db = await connect(tmpDir.name, { readConsistencyInterval: 5 });
|
||||||
expect(db.display()).toBe(
|
expect(db.display()).toBe(
|
||||||
`NativeDatabase(uri=${tmpDir.name}, read_consistency_interval=5s)`,
|
`ListingDatabase(uri=${tmpDir.name}, read_consistency_interval=5s)`,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -72,6 +61,26 @@ describe("given a connection", () => {
|
|||||||
await expect(tbl.countRows()).resolves.toBe(1);
|
await expect(tbl.countRows()).resolves.toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should be able to drop tables`", async () => {
|
||||||
|
await db.createTable("test", [{ id: 1 }, { id: 2 }]);
|
||||||
|
await db.createTable("test2", [{ id: 1 }, { id: 2 }]);
|
||||||
|
await db.createTable("test3", [{ id: 1 }, { id: 2 }]);
|
||||||
|
|
||||||
|
await expect(db.tableNames()).resolves.toEqual(["test", "test2", "test3"]);
|
||||||
|
|
||||||
|
await db.dropTable("test2");
|
||||||
|
|
||||||
|
await expect(db.tableNames()).resolves.toEqual(["test", "test3"]);
|
||||||
|
|
||||||
|
await db.dropAllTables();
|
||||||
|
|
||||||
|
await expect(db.tableNames()).resolves.toEqual([]);
|
||||||
|
|
||||||
|
// Make sure we can still create more tables after dropping all
|
||||||
|
|
||||||
|
await db.createTable("test4", [{ id: 1 }, { id: 2 }]);
|
||||||
|
});
|
||||||
|
|
||||||
it("should fail if creating table twice, unless overwrite is true", async () => {
|
it("should fail if creating table twice, unless overwrite is true", async () => {
|
||||||
let tbl = await db.createTable("test", [{ id: 1 }, { id: 2 }]);
|
let tbl = await db.createTable("test", [{ id: 1 }, { id: 2 }]);
|
||||||
await expect(tbl.countRows()).resolves.toBe(2);
|
await expect(tbl.countRows()).resolves.toBe(2);
|
||||||
@@ -107,14 +116,15 @@ describe("given a connection", () => {
|
|||||||
const data = [...Array(10000).keys()].map((i) => ({ id: i }));
|
const data = [...Array(10000).keys()].map((i) => ({ id: i }));
|
||||||
|
|
||||||
// Create in v1 mode
|
// Create in v1 mode
|
||||||
let table = await db.createTable("test", data, { useLegacyFormat: true });
|
let table = await db.createTable("test", data, {
|
||||||
|
storageOptions: { newTableDataStorageVersion: "legacy" },
|
||||||
|
});
|
||||||
|
|
||||||
const isV2 = async (table: Table) => {
|
const isV2 = async (table: Table) => {
|
||||||
const data = await table
|
const data = await table
|
||||||
.query()
|
.query()
|
||||||
.limit(10000)
|
.limit(10000)
|
||||||
.toArrow({ maxBatchLength: 100000 });
|
.toArrow({ maxBatchLength: 100000 });
|
||||||
console.log(data.batches.length);
|
|
||||||
return data.batches.length < 5;
|
return data.batches.length < 5;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -133,7 +143,7 @@ describe("given a connection", () => {
|
|||||||
const schema = new Schema([new Field("id", new Float64(), true)]);
|
const schema = new Schema([new Field("id", new Float64(), true)]);
|
||||||
|
|
||||||
table = await db.createEmptyTable("test_v2_empty", schema, {
|
table = await db.createEmptyTable("test_v2_empty", schema, {
|
||||||
useLegacyFormat: false,
|
storageOptions: { newTableDataStorageVersion: "stable" },
|
||||||
});
|
});
|
||||||
|
|
||||||
await table.add(data);
|
await table.add(data);
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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 * as tmp from "tmp";
|
import * as tmp from "tmp";
|
||||||
|
|
||||||
@@ -28,6 +17,8 @@ import {
|
|||||||
import { EmbeddingFunction, LanceSchema } from "../lancedb/embedding";
|
import { EmbeddingFunction, LanceSchema } from "../lancedb/embedding";
|
||||||
import { getRegistry, register } from "../lancedb/embedding/registry";
|
import { getRegistry, register } from "../lancedb/embedding/registry";
|
||||||
|
|
||||||
|
const testOpenAIInteg = process.env.OPENAI_API_KEY == null ? test.skip : test;
|
||||||
|
|
||||||
describe("embedding functions", () => {
|
describe("embedding functions", () => {
|
||||||
let tmpDir: tmp.DirResult;
|
let tmpDir: tmp.DirResult;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -40,9 +31,6 @@ describe("embedding functions", () => {
|
|||||||
|
|
||||||
it("should be able to create a table with an embedding function", async () => {
|
it("should be able to create a table with an embedding function", async () => {
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@@ -86,9 +74,6 @@ describe("embedding functions", () => {
|
|||||||
it("should be able to append and upsert using embedding function", async () => {
|
it("should be able to append and upsert using embedding function", async () => {
|
||||||
@register()
|
@register()
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@@ -154,9 +139,6 @@ describe("embedding functions", () => {
|
|||||||
it("should be able to create an empty table with an embedding function", async () => {
|
it("should be able to create an empty table with an embedding function", async () => {
|
||||||
@register()
|
@register()
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@@ -205,9 +187,6 @@ describe("embedding functions", () => {
|
|||||||
it("should error when appending to a table with an unregistered embedding function", async () => {
|
it("should error when appending to a table with an unregistered embedding function", async () => {
|
||||||
@register("mock")
|
@register("mock")
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@@ -252,13 +231,35 @@ describe("embedding functions", () => {
|
|||||||
`Function "mock" not found in registry`,
|
`Function "mock" not found in registry`,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testOpenAIInteg("propagates variables through all methods", async () => {
|
||||||
|
delete process.env.OPENAI_API_KEY;
|
||||||
|
const registry = getRegistry();
|
||||||
|
registry.setVar("openai_api_key", "sk-...");
|
||||||
|
const func = registry.get("openai")?.create({
|
||||||
|
model: "text-embedding-ada-002",
|
||||||
|
apiKey: "$var:openai_api_key",
|
||||||
|
}) as EmbeddingFunction;
|
||||||
|
|
||||||
|
const db = await connect("memory://");
|
||||||
|
const wordsSchema = LanceSchema({
|
||||||
|
text: func.sourceField(new Utf8()),
|
||||||
|
vector: func.vectorField(),
|
||||||
|
});
|
||||||
|
const tbl = await db.createEmptyTable("words", wordsSchema, {
|
||||||
|
mode: "overwrite",
|
||||||
|
});
|
||||||
|
await tbl.add([{ text: "hello world" }, { text: "goodbye world" }]);
|
||||||
|
|
||||||
|
const query = "greetings";
|
||||||
|
const actual = (await tbl.search(query).limit(1).toArray())[0];
|
||||||
|
expect(actual).toHaveProperty("text");
|
||||||
|
});
|
||||||
|
|
||||||
test.each([new Float16(), new Float32(), new Float64()])(
|
test.each([new Float16(), new Float32(), new Float64()])(
|
||||||
"should be able to provide manual embeddings with multiple float datatype",
|
"should be able to provide manual embeddings with multiple float datatype",
|
||||||
async (floatType) => {
|
async (floatType) => {
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@@ -303,10 +304,6 @@ describe("embedding functions", () => {
|
|||||||
async (floatType) => {
|
async (floatType) => {
|
||||||
@register("test1")
|
@register("test1")
|
||||||
class MockEmbeddingFunctionWithoutNDims extends EmbeddingFunction<string> {
|
class MockEmbeddingFunctionWithoutNDims extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
embeddingDataType(): Float {
|
embeddingDataType(): Float {
|
||||||
return floatType;
|
return floatType;
|
||||||
}
|
}
|
||||||
@@ -321,9 +318,6 @@ describe("embedding functions", () => {
|
|||||||
}
|
}
|
||||||
@register("test")
|
@register("test")
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
import * as apiArrow from "apache-arrow";
|
import * as apiArrow from "apache-arrow";
|
||||||
// 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 * as arrow15 from "apache-arrow-15";
|
import * as arrow15 from "apache-arrow-15";
|
||||||
import * as arrow16 from "apache-arrow-16";
|
import * as arrow16 from "apache-arrow-16";
|
||||||
import * as arrow17 from "apache-arrow-17";
|
import * as arrow17 from "apache-arrow-17";
|
||||||
@@ -20,7 +11,11 @@ import * as arrow18 from "apache-arrow-18";
|
|||||||
import * as tmp from "tmp";
|
import * as tmp from "tmp";
|
||||||
|
|
||||||
import { connect } from "../lancedb";
|
import { connect } from "../lancedb";
|
||||||
import { EmbeddingFunction, LanceSchema } from "../lancedb/embedding";
|
import {
|
||||||
|
EmbeddingFunction,
|
||||||
|
FunctionOptions,
|
||||||
|
LanceSchema,
|
||||||
|
} from "../lancedb/embedding";
|
||||||
import { getRegistry, register } from "../lancedb/embedding/registry";
|
import { getRegistry, register } from "../lancedb/embedding/registry";
|
||||||
|
|
||||||
describe.each([arrow15, arrow16, arrow17, arrow18])("LanceSchema", (arrow) => {
|
describe.each([arrow15, arrow16, arrow17, arrow18])("LanceSchema", (arrow) => {
|
||||||
@@ -48,11 +43,6 @@ describe.each([arrow15, arrow16, arrow17, arrow18])("Registry", (arrow) => {
|
|||||||
it("should register a new item to the registry", async () => {
|
it("should register a new item to the registry", async () => {
|
||||||
@register("mock-embedding")
|
@register("mock-embedding")
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {
|
|
||||||
someText: "hello",
|
|
||||||
};
|
|
||||||
}
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@@ -98,11 +88,6 @@ describe.each([arrow15, arrow16, arrow17, arrow18])("Registry", (arrow) => {
|
|||||||
});
|
});
|
||||||
test("should error if registering with the same name", async () => {
|
test("should error if registering with the same name", async () => {
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {
|
|
||||||
someText: "hello",
|
|
||||||
};
|
|
||||||
}
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@@ -123,13 +108,9 @@ describe.each([arrow15, arrow16, arrow17, arrow18])("Registry", (arrow) => {
|
|||||||
});
|
});
|
||||||
test("schema should contain correct metadata", async () => {
|
test("schema should contain correct metadata", async () => {
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
constructor(args: FunctionOptions = {}) {
|
||||||
return {
|
|
||||||
someText: "hello",
|
|
||||||
};
|
|
||||||
}
|
|
||||||
constructor() {
|
|
||||||
super();
|
super();
|
||||||
|
this.resolveVariables(args);
|
||||||
}
|
}
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
@@ -141,7 +122,7 @@ describe.each([arrow15, arrow16, arrow17, arrow18])("Registry", (arrow) => {
|
|||||||
return data.map(() => [1, 2, 3]);
|
return data.map(() => [1, 2, 3]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const func = new MockEmbeddingFunction();
|
const func = new MockEmbeddingFunction({ someText: "hello" });
|
||||||
|
|
||||||
const schema = LanceSchema({
|
const schema = LanceSchema({
|
||||||
id: new arrow.Int32(),
|
id: new arrow.Int32(),
|
||||||
@@ -164,3 +145,79 @@ describe.each([arrow15, arrow16, arrow17, arrow18])("Registry", (arrow) => {
|
|||||||
expect(schema.metadata).toEqual(expectedMetadata);
|
expect(schema.metadata).toEqual(expectedMetadata);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Registry.setVar", () => {
|
||||||
|
const registry = getRegistry();
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
@register("mock-embedding")
|
||||||
|
// biome-ignore lint/correctness/noUnusedVariables :
|
||||||
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
|
constructor(optionsRaw: FunctionOptions = {}) {
|
||||||
|
super();
|
||||||
|
const options = this.resolveVariables(optionsRaw);
|
||||||
|
|
||||||
|
expect(optionsRaw["someKey"].startsWith("$var:someName")).toBe(true);
|
||||||
|
expect(options["someKey"]).toBe("someValue");
|
||||||
|
|
||||||
|
if (options["secretKey"]) {
|
||||||
|
expect(optionsRaw["secretKey"]).toBe("$var:secretKey");
|
||||||
|
expect(options["secretKey"]).toBe("mySecret");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async computeSourceEmbeddings(data: string[]) {
|
||||||
|
return data.map(() => [1, 2, 3]);
|
||||||
|
}
|
||||||
|
embeddingDataType() {
|
||||||
|
return new arrow18.Float32() as apiArrow.Float;
|
||||||
|
}
|
||||||
|
protected getSensitiveKeys() {
|
||||||
|
return ["secretKey"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
afterEach(() => {
|
||||||
|
registry.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Should error if the variable is not set", () => {
|
||||||
|
console.log(registry.get("mock-embedding"));
|
||||||
|
expect(() =>
|
||||||
|
registry.get("mock-embedding")!.create({ someKey: "$var:someName" }),
|
||||||
|
).toThrow('Variable "someName" not found');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should use default values if not set", () => {
|
||||||
|
registry
|
||||||
|
.get("mock-embedding")!
|
||||||
|
.create({ someKey: "$var:someName:someValue" });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should set a variable that the embedding function understand", () => {
|
||||||
|
registry.setVar("someName", "someValue");
|
||||||
|
registry.get("mock-embedding")!.create({ someKey: "$var:someName" });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should reject secrets that aren't passed as variables", () => {
|
||||||
|
registry.setVar("someName", "someValue");
|
||||||
|
expect(() =>
|
||||||
|
registry
|
||||||
|
.get("mock-embedding")!
|
||||||
|
.create({ secretKey: "someValue", someKey: "$var:someName" }),
|
||||||
|
).toThrow(
|
||||||
|
'The key "secretKey" is sensitive and cannot be set directly. Please use the $var: syntax to set it.',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not serialize secrets", () => {
|
||||||
|
registry.setVar("someName", "someValue");
|
||||||
|
registry.setVar("secretKey", "mySecret");
|
||||||
|
const func = registry
|
||||||
|
.get("mock-embedding")!
|
||||||
|
.create({ secretKey: "$var:secretKey", someKey: "$var:someName" });
|
||||||
|
expect(func.toJSON()).toEqual({
|
||||||
|
secretKey: "$var:secretKey",
|
||||||
|
someKey: "$var:someName",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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 * as http from "http";
|
import * as http from "http";
|
||||||
import { RequestListener } from "http";
|
import { RequestListener } from "http";
|
||||||
@@ -115,4 +104,26 @@ describe("remote connection", () => {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should pass on requested extra headers", async () => {
|
||||||
|
await withMockDatabase(
|
||||||
|
(req, res) => {
|
||||||
|
expect(req.headers["x-my-header"]).toEqual("my-value");
|
||||||
|
|
||||||
|
const body = JSON.stringify({ tables: [] });
|
||||||
|
res.writeHead(200, { "Content-Type": "application/json" }).end(body);
|
||||||
|
},
|
||||||
|
async (db) => {
|
||||||
|
const tableNames = await db.tableNames();
|
||||||
|
expect(tableNames).toEqual([]);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
clientConfig: {
|
||||||
|
extraHeaders: {
|
||||||
|
"x-my-header": "my-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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.
|
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
// Copyright 2024 Lance Developers.
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
//
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
// 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 * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
@@ -264,6 +253,31 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
const arrowTbl = await table.toArrow();
|
const arrowTbl = await table.toArrow();
|
||||||
expect(arrowTbl).toBeInstanceOf(ArrowTable);
|
expect(arrowTbl).toBeInstanceOf(ArrowTable);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should be able to handle missing fields", async () => {
|
||||||
|
const schema = new arrow.Schema([
|
||||||
|
new arrow.Field("id", new arrow.Int32(), true),
|
||||||
|
new arrow.Field("y", new arrow.Int32(), true),
|
||||||
|
new arrow.Field("z", new arrow.Int64(), true),
|
||||||
|
]);
|
||||||
|
const db = await connect(tmpDir.name);
|
||||||
|
const table = await db.createEmptyTable("testNull", schema);
|
||||||
|
await table.add([{ id: 1, y: 2 }]);
|
||||||
|
await table.add([{ id: 2 }]);
|
||||||
|
|
||||||
|
await table
|
||||||
|
.mergeInsert("id")
|
||||||
|
.whenNotMatchedInsertAll()
|
||||||
|
.execute([
|
||||||
|
{ id: 3, z: 3 },
|
||||||
|
{ id: 4, z: 5 },
|
||||||
|
]);
|
||||||
|
|
||||||
|
const res = await table.query().toArrow();
|
||||||
|
expect(res.getChild("id")?.toJSON()).toEqual([1, 2, 3, 4]);
|
||||||
|
expect(res.getChild("y")?.toJSON()).toEqual([2, null, null, null]);
|
||||||
|
expect(res.getChild("z")?.toJSON()).toEqual([null, null, 3n, 5n]);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1024,9 +1038,6 @@ describe.each([arrow15, arrow16, arrow17, arrow18])(
|
|||||||
test("can search using a string", async () => {
|
test("can search using a string", async () => {
|
||||||
@register()
|
@register()
|
||||||
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
class MockEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
ndims() {
|
ndims() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
import { IntoSql, toSQL } from "../lancedb/util";
|
import { IntoSql, toSQL } from "../lancedb/util";
|
||||||
test.each([
|
test.each([
|
||||||
["string", "'string'"],
|
["string", "'string'"],
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
extern crate napi_build;
|
extern crate napi_build;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { expect, test } from "@jest/globals";
|
import { expect, test } from "@jest/globals";
|
||||||
// --8<-- [start:import]
|
// --8<-- [start:import]
|
||||||
import * as lancedb from "@lancedb/lancedb";
|
import * as lancedb from "@lancedb/lancedb";
|
||||||
import { VectorQuery } from "@lancedb/lancedb";
|
import type { VectorQuery } from "@lancedb/lancedb";
|
||||||
// --8<-- [end:import]
|
// --8<-- [end:import]
|
||||||
import { withTempDirectory } from "./util.ts";
|
import { withTempDirectory } from "./util.ts";
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,6 @@ test("basic table examples", async () => {
|
|||||||
// --8<-- [end:add_data]
|
// --8<-- [end:add_data]
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
// --8<-- [start:add_columns]
|
// --8<-- [start:add_columns]
|
||||||
await tbl.addColumns([
|
await tbl.addColumns([
|
||||||
{ name: "double_price", valueSql: "cast((price * 2) as Float)" },
|
{ name: "double_price", valueSql: "cast((price * 2) as Float)" },
|
||||||
@@ -136,7 +135,6 @@ test("basic table examples", async () => {
|
|||||||
// --8<-- [start:drop_columns]
|
// --8<-- [start:drop_columns]
|
||||||
await tbl.dropColumns(["dbl_price"]);
|
await tbl.dropColumns(["dbl_price"]);
|
||||||
// --8<-- [end:drop_columns]
|
// --8<-- [end:drop_columns]
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// --8<-- [start:vector_search]
|
// --8<-- [start:vector_search]
|
||||||
|
|||||||
52
nodejs/examples/biome.json
Normal file
52
nodejs/examples/biome.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
||||||
|
"vcs": {
|
||||||
|
"enabled": false,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": false
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"ignoreUnknown": false,
|
||||||
|
"ignore": []
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"indentStyle": "space"
|
||||||
|
},
|
||||||
|
"organizeImports": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": true,
|
||||||
|
"rules": {
|
||||||
|
"recommended": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"formatter": {
|
||||||
|
"quoteStyle": "double"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"include": ["*"],
|
||||||
|
"linter": {
|
||||||
|
"rules": {
|
||||||
|
"style": {
|
||||||
|
"noNonNullAssertion": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": ["merge_insert.test.ts"],
|
||||||
|
"linter": {
|
||||||
|
"rules": {
|
||||||
|
"style": {
|
||||||
|
"useNamingConvention": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
import { FeatureExtractionPipeline, pipeline } from "@huggingface/transformers";
|
import {
|
||||||
|
type FeatureExtractionPipeline,
|
||||||
|
pipeline,
|
||||||
|
} from "@huggingface/transformers";
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
import { expect, test } from "@jest/globals";
|
import { expect, test } from "@jest/globals";
|
||||||
|
|||||||
@@ -43,12 +43,17 @@ test("custom embedding function", async () => {
|
|||||||
|
|
||||||
@register("my_embedding")
|
@register("my_embedding")
|
||||||
class MyEmbeddingFunction extends EmbeddingFunction<string> {
|
class MyEmbeddingFunction extends EmbeddingFunction<string> {
|
||||||
toJSON(): object {
|
constructor(optionsRaw = {}) {
|
||||||
return {};
|
super();
|
||||||
|
const options = this.resolveVariables(optionsRaw);
|
||||||
|
// Initialize using options
|
||||||
}
|
}
|
||||||
ndims() {
|
ndims() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
protected getSensitiveKeys(): string[] {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
embeddingDataType(): Float {
|
embeddingDataType(): Float {
|
||||||
return new Float32();
|
return new Float32();
|
||||||
}
|
}
|
||||||
@@ -94,3 +99,14 @@ test("custom embedding function", async () => {
|
|||||||
expect(await table2.countRows()).toBe(2);
|
expect(await table2.countRows()).toBe(2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("embedding function api_key", async () => {
|
||||||
|
// --8<-- [start:register_secret]
|
||||||
|
const registry = getRegistry();
|
||||||
|
registry.setVar("api_key", "sk-...");
|
||||||
|
|
||||||
|
const func = registry.get("openai")!.create({
|
||||||
|
apiKey: "$var:api_key",
|
||||||
|
});
|
||||||
|
// --8<-- [end:register_secret]
|
||||||
|
});
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user