forked from lancedb/lancedb
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat!: migrate FTS from tantivy to lance-index (lancedb#1483)
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 <[email protected]>
- Loading branch information
Showing
34 changed files
with
715 additions
and
147 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// 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"); |
Oops, something went wrong.