Viv*_*vek 8 database full-text-search h2
请考虑以下示例
CREATE ALIAS IF NOT EXISTS FT_INIT FOR "org.h2.fulltext.FullText.init";
CALL FT_INIT();
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR);
INSERT INTO TEST VALUES(1, 'Hello World');
CALL FT_CREATE_INDEX('PUBLIC', 'TEST', NULL);
Run Code Online (Sandbox Code Playgroud)
我已经执行了以下查询
SELECT * FROM FT_SEARCH('Hello', 0, 0);
Run Code Online (Sandbox Code Playgroud)
但是这个查询返回"PUBLIC"."TEST"WHERE"ID"= 1.
"PUBLIC"."TEST" WHERE "ID"=1以获取包含"Hello"字样的记录?是的,查询中的每一行FT_SEARCH代表一个schema-table-row,其中找到了一个关键字.搜索不区分大小写,text参数FT_SEARCH可以包含多个单词.例如,
DELETE FROM TEST;
INSERT INTO TEST VALUES(1, 'Hello World');
INSERT INTO TEST VALUES(2, 'Goodbye World');
INSERT INTO TEST VALUES(3, 'Hello Goodbye');
CALL FT_REINDEX();
SELECT * FROM FT_SEARCH('hello goodbye', 0, 0);
Run Code Online (Sandbox Code Playgroud)
仅返回第三行:
QUERY SCORE
"PUBLIC"."TEST" WHERE "ID"=3 1.0
Run Code Online (Sandbox Code Playgroud)
另请注意,FT_SEARCH_DATA可用于检索数据本身.例如,
SELECT T.* FROM FT_SEARCH_DATA('hello', 0, 0) FT, TEST T
WHERE FT.TABLE='TEST' AND T.ID=FT.KEYS[0];
Run Code Online (Sandbox Code Playgroud)
返回包含关键字的两行:
ID NAME
1 Hello World
3 Hello Goodbye
Run Code Online (Sandbox Code Playgroud)Apache Lucene支持通配符搜索,虽然领先的通配符(例如*ell)往往很昂贵.
| 归档时间: |
|
| 查看次数: |
7600 次 |
| 最近记录: |