diff --git a/nodejs/__test__/table.test.ts b/nodejs/__test__/table.test.ts index 5a27b852b..837d9b608 100644 --- a/nodejs/__test__/table.test.ts +++ b/nodejs/__test__/table.test.ts @@ -4050,6 +4050,28 @@ describe.each(arrowVersions)( ); }); + test.each(["Klingon", "english"])( + "rejects unsupported full text language %s with a catchable error", + (language) => { + expect(() => Index.fts({ language })).toThrow( + new Error( + `LanceDB does not support the requested language: '${language}'`, + ), + ); + }, + ); + + test("full text search with a supported language", async () => { + const db = await connect(tmpDir.name); + const table = await db.createTable("test", [{ text: "running" }]); + await table.createIndex("text", { + config: Index.fts({ language: "English", stem: true }), + }); + + const results = await table.search("run").toArray(); + expect(results.map((row) => row.text)).toEqual(["running"]); + }); + test("full text search without lowercase", async () => { const db = await connect(tmpDir.name); const data = [ diff --git a/nodejs/src/index.rs b/nodejs/src/index.rs index 762f74870..e5884aa4d 100644 --- a/nodejs/src/index.rs +++ b/nodejs/src/index.rs @@ -239,7 +239,12 @@ impl Index { opts = opts.base_tokenizer(base_tokenizer); } if let Some(language) = language { - opts = opts.language(&language).unwrap(); + opts = opts.language(&language).map_err(|_| { + napi::Error::from_reason(format!( + "LanceDB does not support the requested language: '{}'", + language + )) + })?; } if let Some(max_token_length) = max_token_length { opts = opts.max_token_length(Some(max_token_length as usize));