除了存储过程搜索和 SQL 标量搜索函数之外,Net Search Extender 还提供了与存储过程看起来非常相似的两个 SQL 表值函数。
这两个表值函数都称为 db2ext.textsearch。它们之间唯一的区别就是:一个表值函数支持 HIGHLIGHT 函数,并且具有两个附加参数:numberOfHits 和 hitInformation。
注意,不能对具有复合主键的表使用表值函数。
有关使用 HIGHLIGHT 函数的信息,请参阅DB2EXT.HIGHLIGHT。
仅当用户表存储在具有单个节点的表空间中时,才能在分布式 DB2 环境中使用表值函数。还必须确保使用 DB2NODE 环境变量连接至正确的节点。
1. db2ext.textsearch without highlight support db2ext.textSearch ( query VARCHAR(4096), indexSchema VARCHAR(128), indexName VARCHAR(128), resultFirstRow INTEGER, resultNumberRows INTEGER, primKeyBinding <supported types>,// same type as primary key ) return table ( primKey <supported types>,// same type as primary key numberOfMatches INTEGER, score DOUBLE, totalNbResults INTEGER ) 2. db2ext.textsearch with highlight support db2ext.textSearch ( query VARCHAR(4096), indexSchema VARCHAR(128), indexName VARCHAR(128), resultFirstRow INTEGER, resultNumberRows INTEGER, primKeyBinding <supported types>,// same type as primary key numberOfHits INTEGER ) return table ( primKey <supported types>,// same type as primary key numberOfMatches INTEGER, score DOUBLE, totalNbResults INTEGER hitInformation BLOB(20K) )
下面是一些输入参数。
注意,数字 0 标识查询结果列表中的第一行。
注意:此参数与用来确定查询结果列表的最大大小的结果限制查询参数是不同的。
另外,该参数还确定文本搜索的范围。如果 primaryKeyBinding 设置为 NULL ("CAST(NULL as <type1>)", 则搜索范围将是存储在索引中的所有文档。或者,可以限制只对 primaryKeyBinding 绑定至的文档进行搜索。
例如,如果将 primaryKeyBinding 设置为 CAST(5 as BIGINT), 则限制只对 BIGINT 主键值为“5”的单个文档进行搜索。
注意,只支持下列类型的单个列主键:SMALLINT、INTEGER、BIGINT、REAL、DOUBLE、VARCHAR FOR BIT DATA、DATE、TIME 和 TIMESTAMP。
注意:只有构造 db2ext.highlight 函数必需的突出显示信息才需要此参数。
下列返回值存储在临时表中,如果请求进一步的结果,则需要将该临时表连接至正常表。注意,仅当在 select 语句中请求了 NUMBEROFMATCHES、SCORE、TOTALNUMBEROFRESULTS 和 HITINFORMATION 时才会对这些函数求值。
还要注意,当在查询中将 STOP SEARCH AFTER 或 RESULT LIMIT 与 SCORE 语法一起使用时,此数值不再可靠。
注意,仅当指定了 numberOfHits 时才会返回此值。
借助 SQL 表值函数,可以按搜索存储过程搜索的相同方式来搜索视图。唯一的例外就是不需要共享内存,因此不需要激活索引。
此函数主要供已经在存储过程搜索中使用了 SQL 查询的那些用户使用。但是,存在的限制就是只支持基本表的单列主键。
以下示例说明可以如何处理多列主键表:
select s.id from db2ext.sample s, table (db2ext.textSearch( '"characteristics"', 'DB2EXT', 'COMMANDS', 1, 20, cast(NULL as INTEGER))) t where s.id = t.primkey
在此示例中,必须首先对具有单个唯一键的此表创建视图,然后对此视图创建索引。
有关将 SQL 表值函数与 db2ext.highlight 函数配合使用的示例,请参阅第 *** 页。