要执行文本搜索,请在 SELECT 语句的 WHERE 子句中使用 etx_contains() 运算符。
例如,假设您将搜索文本存储在名为
abstracts 的 CLOB 列中。要在此列上针对词组
multimedia document editor 执行模式搜索,请执行以下语句:
SELECT title FROM reports
WHERE etx_contains(abstract,
Row('multimedia document editor',
'SEARCH_TYPE = PHRASE_EXACT & PATTERN_ALL'));
该搜索返回包含词组
mulitmedia document editor、
multimidia ducument editer,甚至包含
multimillion documentary editorials 的文档的
title 列,尽管最后一个命中比前两个命中的分数要低很多。由于该语句指定的是精确词组搜索,因此该搜索不会查找只包含词
multimedia 的文档,也不会查找包含词组
editorial of a multimedia event 的文档,因为词
multimedia 和
editorial 的顺序不同。
要点: 在索引中不同字符集支持不同数量的字符。字符集支持的字符越多,在线索词中被搜索的字符就越少,反之亦然。请参阅
字符集和搜索线索词的大小,以获取更多信息。
另外,可以使用 WILDCARD_CLUE 查询参数来执行通配符搜索。在这种情况下,* 字符可以出现在线索中任意或所有词前面和/或后面,展开 * 以匹配任意字符串,如下面查询中所示:
SELECT title FROM reports
WHERE etx_contains(abstract,
Row("*forgiv* drink*", "WILDCARD_CLUE & search_type=PHRASE_EXACT"));
该查询可以找出 unforgivable drinking 和 forgiven drinkers
。但不会找出 unforgiving nondrinkers,因为线索词 drink* 的开头没有 *。
使用关键字近似搜索来查找包含词组
multimedia editor 或
editor of a multimedia event 的文档。上面的示例表明词组搜索可能不是您的最佳选择,因为在词组搜索中通常需要考虑词的顺序。但是在关键字搜索中不用考虑顺序,因为它将词视为单独的实体。近似搜索确保关键字彼此之间很接近。下面是一个关键字近似搜索示例:
SELECT title FROM reports
WHERE etx_contains(abstract,
Row('multimedia editor',
'SEARCH_TYPE = PROX_SEARCH(5) '));
该搜索返回符合下列条件的文档的 title 列:该文档包含关键字 multimedia 和 editor,并且两者之间相隔的词个数不超过 5 个。这意味着该搜索不会返回包含词组 editor of a world class magazine known for its cutting edge articles on multimedia 的文档,因为关键字 multimedia 和 editor 被 5 个以上的词分隔。
有时,搜索非索引字十分必要,因为它们与线索的某些部分相关。例如,您可能希望搜索精确词组
plug and play,其中词
and 是非索引字。缺省情况下,文本搜索引擎不会搜索非索引字,所以搜索结果可能与您想要的结果之间存在差异。以下示例显示了如何强制在搜索中包含非索引字:
SELECT title FROM reports
WHERE etx_contains(abstract,
Row('plug and play',
'SEARCH_TYPE = PHRASE_EXACT & CONSIDER_STOPWORDS'));
要点: 如果想要使用调整参数 CONSIDER_STOPWORDS,那么在创建 etx 索引时必须指定索引参数 INCLUDE_STOPWORDS。索引参数 INCLUDE_STOPWORDS 强制对 STOPWORD_LIST 索引参数指定的非索引字建立索引;缺省情况下,不会对该参数指定的非索引字建立索引。