mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-26 14:49:57 +00:00
Lance now supports FTS, so add it into lancedb Python, TypeScript and Rust SDKs. For Python, we still use tantivy based FTS by default because the lance FTS index now misses some features of tantivy. For Python: - Support to create lance based FTS index - Support to specify columns for full text search (only available for lance based FTS index) For TypeScript: - Change the search method so that it can accept both string and vector - Support full text search For Rust - Support full text search The others: - Update the FTS doc BREAKING CHANGE: - for Python, this renames the attached score column of FTS from "score" to "_score", this could be a breaking change for users that rely the scores --------- Signed-off-by: BubbleCal <bubble-cal@outlook.com>
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
// Copyright 2024 Lance Developers.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import * as lancedb from "@lancedb/lancedb";
|
|
|
|
const db = await lancedb.connect("data/sample-lancedb");
|
|
|
|
const words = [
|
|
"apple",
|
|
"banana",
|
|
"cherry",
|
|
"date",
|
|
"elderberry",
|
|
"fig",
|
|
"grape",
|
|
];
|
|
|
|
const data = Array.from({ length: 10_000 }, (_, i) => ({
|
|
vector: Array(1536).fill(i),
|
|
id: i,
|
|
item: `item ${i}`,
|
|
strId: `${i}`,
|
|
doc: words[i % words.length],
|
|
}));
|
|
|
|
const tbl = await db.createTable("myVectors", data, { mode: "overwrite" });
|
|
|
|
await tbl.createIndex("doc", {
|
|
config: lancedb.Index.fts(),
|
|
});
|
|
|
|
// --8<-- [start:full_text_search]
|
|
let result = await tbl
|
|
.search("apple")
|
|
.select(["id", "doc"])
|
|
.limit(10)
|
|
.toArray();
|
|
console.log(result);
|
|
// --8<-- [end:full_text_search]
|
|
|
|
console.log("SQL search: done");
|