请考虑以下示例
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);
我已经执行了以下查询
SELECT * FROM FT_SEARCH('Hello',0);
但是这个查询返回“PUBLIC”.“TEST”WHERE“ID”= 1.
>我是否必须再次执行此“PUBLIC”.“TEST”WHERE“ID”= 1以获取包含“Hello”字样的记录?
>从FT_Search中搜索包含’ell’字样的所有记录的查询是什么.例如在H2 Native全文搜索中的%ell%
解决方法
>是,使用FT_SEARCH的查询中的每一行代表一个架构表行,其中找到了一个关键字.搜索不区分大小写,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);
仅返回第三行:
QUERY score "PUBLIC"."TEST" WHERE "ID"=3 1.0
另请注意,FT_SEARCH_DATA可用于检索数据本身.例如,
SELECT T.* FROM FT_SEARCH_DATA('hello',0) FT,TEST T WHERE FT.TABLE='TEST' AND T.ID=FT.KEYS[0];
返回包含关键字的两行:
ID NAME 1 Hello World 3 Hello Goodbye
> Apache Lucene支持wildcard搜索,虽然领先的通配符(例如* ell)往往很昂贵.