etx_contains() 运算符执行您通过使用线索、调整参数和可选的语句局部变量 (SLV) 定义的搜索。
元素 | 用途 | 语法 |
---|---|---|
col_exp | 要搜索的列的名称。 | 语法必须遵照GBase 8s SQL 指南:语法中的列表达式语法。 |
slv | 搜索引擎用于存储分数和突出显示特定行信息的语句局部变量(SLV)。 | 语法必须遵照标识段;请参阅GBase 8s SQL 指南:语法。 |
元素 | 用途 | 限制 | 语法 |
---|---|---|---|
character | 构成加引号字符串的字符 | 当加引号的字符串是 Row()
表达式的一部分时(请参阅行表达式用法的语法),将应用以下约定:
|
字符是从键盘输入的字面值。 |
元素 | 用途 | 限制 | 语法 |
---|---|---|---|
hits | 文本搜索针对单个索引分段返回的最大命中数。 | 数据类型必须是正整数。 | 语法必须遵照GBase 8s SQL 指南:语法中的 Literal Number 语法。 |
limit | 可以出现在两个或多个搜索词之间的非搜索词的数目。 | 数据类型必须是大于搜索词数目的非零整数。 | 语法必须遵照GBase 8s SQL 指南:语法中的 Literal Number 语法。 |
score | 将词视为模式匹配的最低分数。 | 数据类型必须是实数。 | 语法必须遵照GBase 8s SQL 指南:语法中的 Literal Number 语法。 |
syn_name | 同义词列表名。 | 同义词列表必须存在。 | 语法必须遵照GBase 8s SQL 指南:语法中的 Literal Number 语法。 |
IfxDocDesc | 线索可以按 IfxDocDesc 数据类型存储。 | 当执行搜索时,仅参考 location 字段中的数据。 | 请参阅 IfxDocDesc 数据类型,以获取有关 IfxDocDesc 行数据类型的更多信息。 |
调整参数 | 描述 | 限制 | 缺省值 |
---|---|---|---|
CONSIDER_STOPWORDS | 向搜索引擎指示将在搜索中包含非索引字。 | 必须已经使用 INCLUDE_STOPWORDS 和 STOPWORD_LIST 索引参数创建了 etx 索引。 | 已禁用 |
MATCH_SYNONYM | 启用同义词匹配。 如果未指定任何值,将参考缺省同义词列表 etx_thesaurus 。如果指定了一个值,将参考指定的同义词列表而不是缺省列表。请遵照同义词列表中提供的指示信息来创建缺省或备用列表。 | 如果指定了定制同义词列表,必须已经通过 etx_CreateSynWlst() 例程创建了该列表。当与模式匹配(如 PATTERN_ALL)一起使用时,只会找到根词的模式匹配,而不涉及同义词。 | 已禁用 |
MAX_MATCHES | 允许您指定搜索引擎返回的 per index fragment 的最大命中数。如果要使用此调整参数来限制搜索返回的行数,请将其设置为 1000 或表中总行数的 10% 这两个数字中的较大者。以 etx 索引为例,Per index fragment 意味着如果将该索引分割为两个部分,并且此调整参数设置为 1000,那么可能返回的最大命中数为 2000。 | 无 | 完全命中 |
NO_HILITE | 允许您加快以下类型的查询:希望返回查询结果的分数,但不需要突出显示信息。 | 该查询必须包含 etx_ReturnType 数据类型,这是一种复合行类型,它同时包含文档分数和突出显示信息的子行类型。 返回所有信息可能会产生相当大的开销,但通过指定 NO_HILITE 查询参数,DataBlade Module 会忽略突出显示数据的所有准备工作,而仅返回分数。 | 已禁用 |
PATTERN_ALL | 启用所有模式搜索选项:PATTERN_BASIC、PATTERN_TRANS 和 PATTERN_SUBS。 | 必须已经使用 WORD_SUPPORT = PATTERN 索引参数创建了 etx 索引。 | 已禁用 |
PATTERN_BASIC | 启用基础搜索选项。该搜索根据 WORD_SCORE 的值返回最佳模式匹配。这可能包含线索中词的子串或父串模式匹配以及调换和替换,但并不保证如此。 | 必须已经使用 WORD_SUPPORT = PATTERN 索引参数创建了 etx 索引。 | 已禁用 |
PATTERN_SUBS | 设定搜索引擎返回仅一个字符与线索不匹配的词。 | 必须已经使用 WORD_SUPPORT = PATTERN 索引参数创建了 etx 索引。 | 已禁用 |
PATTERN_TRANS | 设定搜索引擎返回仅一个调换与线索不匹配的词。 | 必须已经使用 WORD_SUPPORT = PATTERN 索引参数创建了 etx 索引。 | 已禁用 |
SEARCH_TYPE | 允许您指定要执行的搜索类型。
|
以下某个值:
如果设置为 PROX_SEARCH、PHRASE_EXACT 或 PHRASE_APPROX,那么必须已经在将 PHRASE_SUPPORT 索引参数设置为 MEDIUM 或 MAXIMUM 的情况下创建了 etx 索引。 如果设置为 BOOLEAN_SEARCH 并用于布尔词组搜索,那么必须已经在将 PHRASE_SUPPORT 索引参数设置为 MEDIUM 或 MAXIMUM 的情况下创建了 etx 索引。 |
WORD |
WILDCARD_CLUE | 为 PATTERN_* 查询参数提供替换词。 包含 WILDCARD_CLUE 查询参数时,* 字符可以出现在线索中任意或所有词前面和/或后面,并且将展开 * 以与任意字符串匹配。WILDCARD_CLUE 适用于线索中的各个词。这就意味着,在所有线索词扩展之后,会根据其他查询参数将该线索视作关键字、布尔表达式或词组。使用 WILDCARD_CLUE 时,线索中字面值的精确匹配将使文档分数达到 99,无论匹配词在开头或结尾是否还有其他字母。举例而言,线索 *worth* 与 worth、worthy 和 unworthiness 这些词的匹配分数都是 99。 | 不能在线索中间指定 *。不能在指定线索的查询参数集中同时使用 WILDCARD_CLUE 查询参数和任何 PATTERN_* 参数。如果希望针对包含字符 *(作为字面值)的线索执行通配符查询,请使用反斜杠对
* 字符进行转义。
* 必须在字符集内,这样才能由 DataBlade 模块搜索到。 如果在通配符查询中包含查询参数 MATCH_SYNONYM,那么会在同义词列表中查找线索中的字面值(排除居前和居后的字符 *)。 如果找到匹配项,所有同义词以及线索中的原始字面值都将执行通配符展开。 如果使用非索引字列表创建了索引,那么 DataBlade Module 会针对通配符展开后产生的所有线索词执行标准非索引字处理。 |
已禁用 |
WORD_SCORE | 允许您指定模式匹配的最低相似度。搜索引擎只会把满足 WORD_SCORE 所设最低标准的词纳入命中计数。 | 必须是 1 到 100 之间的值(包含 1 和 100)。指定 0 表明您希望将值重新设置为缺省值 70。 | 70 |
etx_contains() 运算符返回 BOOLEAN。
SELECT title FROM reports WHERE etx_contains (abstract, Row('multimedia')) AND doc_no > 1005 ;
etx_contains() 的第三个参数(可选)是返回分数和内部突出显示信息的 SLV。 SLV 内容仅在查询期内有效。SLV 的数据类型是 etx_ReturnType,这是从 GBase 8s 派生的行数据类型。有关 etx_ReturnType 数据类型的更多信息,请参阅 etx_ReturnType 数据类型。
尽管 etx 访问方法支持分段索引,但不能通过 etx_contains() 来对索引进行分段。
SELECT title FROM reports WHERE etx_contains (abstract, 'multimedia') AND doc_no > 1005 ;
通常,线索是包含一个或多个词的加引号字符串,如上述示例中的 multimedia 一词。但是,有时您可能希望将整个文档用作线索。为此,请指定 IfxDocDesc 文档而不是加引号的字符串作为 etx_contains() 运算符的参数之一。
由于 LLD_Locator 数据类型(具有 IfxDocDesc 数据类型的 location 字段的数据类型)具有灵活性,因此您可以将数据库中存储或作为操作系统文件存储的文档指定为线索。在将文档作为线索指定给 etx_contains() 运算符时,仅参考 IfxDocDesc 数据类型的 location 字段。忽略其他字段的内容,如 format 和 version 字段。
下一部分提供了将 IfxDocDesc 文档作为线索的搜索示例。
有关 IfxDocDesc 和 LLD_Locator 数据类型的更多信息,请参阅数据类型。
SELECT title FROM reports WHERE etx_contains(abstract, Row('multimedia')) AND author = 'Joe Smith';
SELECT title FROM reports WHERE etx_contains(abstract, Row('multimedia video', 'PATTERN_TRANS & PATTERN_SUBS & MATCH_SYNONYM = my_synonymlist'));
SELECT rc1.score, title FROM reports WHERE etx_contains (abstract, Row('video'), rc1 # etx_ReturnType) AND doc_no > 1005 ORDER BY 1;
SELECT title FROM reports WHERE etx_contains (abstract, Row ( Row ('ASCII', '0', Row ('IFX_FILE', NULL::LLD_Lob, '/local0/excal/clue.txt')::LLD_Locator, NULL::LVARCHAR)::IfxDocDesc) );
操作系统文件 /local0/excal/clue.txt 的全部内容自动转换为线索。尽管没有指定任何调整参数,IfxDocDesc 线索仍必须封装在 Row() 构造函数中。
select title from reports where etx_contains(abstract, Row('dynamic server','search_type=PROX_SEARCH(3) & NO_HILITE'), rc#Etx_ReturnType) order by rc.score; select title from reports where etx_contains(abstract, Row('build*','WILDCARD_CLUE & NO_HILITE'), rc#Etx_ReturnType);
select title from reports where etx_contains(abstract, Row("*forgiv* drink*", "WILDCARD_CLUE & search_type=PHRASE_EXACT"));
该查询可以找出 unforgivable drinking 和 forgiven drinkers 。但不会找出 unforgiving nondrinkers,因为线索词 drink* 的开头没有 *。
select title from reports where etx_contains(abstract, Row("the*", "WILDCARD_CLUE & search_type=WORD"));
该查询返回第 1 行和第 2 行。这是因为 the* 可以扩展为 these、there 和 the。然后执行非索引字处理,将 the 从搜索中除去。这将使得第 3 行从结果中排除。