执行文本搜索查询

要执行文本搜索,请在 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 editormultimidia ducument editer,甚至包含 multimillion documentary editorials 的文档的 title 列,尽管最后一个命中比前两个命中的分数要低很多。由于该语句指定的是精确词组搜索,因此该搜索不会查找只包含词 multimedia 的文档,也不会查找包含词组 editorial of a multimedia event 的文档,因为词 multimediaeditorial 的顺序不同。
要点: 在索引中不同字符集支持不同数量的字符。字符集支持的字符越多,在线索词中被搜索的字符就越少,反之亦然。请参阅字符集和搜索线索词的大小,以获取更多信息。
另外,可以使用 WILDCARD_CLUE 查询参数来执行通配符搜索。在这种情况下,* 字符可以出现在线索中任意或所有词前面和/或后面,展开 * 以匹配任意字符串,如下面查询中所示:
SELECT title FROM reports
   WHERE etx_contains(abstract,
   Row("*forgiv* drink*", "WILDCARD_CLUE & search_type=PHRASE_EXACT"));

该查询可以找出 unforgivable drinkingforgiven drinkers 。但不会找出 unforgiving nondrinkers,因为线索词 drink* 的开头没有 *。

使用关键字近似搜索来查找包含词组 multimedia editoreditor of a multimedia event 的文档。上面的示例表明词组搜索可能不是您的最佳选择,因为在词组搜索中通常需要考虑词的顺序。但是在关键字搜索中不用考虑顺序,因为它将词视为单独的实体。近似搜索确保关键字彼此之间很接近。下面是一个关键字近似搜索示例:
SELECT title FROM reports
    WHERE etx_contains(abstract, 
    Row('multimedia editor', 
        'SEARCH_TYPE = PROX_SEARCH(5) '));

该搜索返回符合下列条件的文档的 title 列:该文档包含关键字 multimediaeditor,并且两者之间相隔的词个数不超过 5 个。这意味着该搜索不会返回包含词组 editor of a world class magazine known for its cutting edge articles on multimedia 的文档,因为关键字 multimediaeditor 被 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 索引参数指定的非索引字建立索引;缺省情况下,不会对该参数指定的非索引字建立索引。