带模式匹配的词组搜索

当使用 SEARCH_TYPE = PHRASE_EXACT 执行搜索时,搜索文本必须包含与线索相同的词组,以为命中发生做准备。如果在指定精确词组搜索之外,还指定了模式搜索(例如,通过指定 PATTERN_ALL),那么线索中的各个词必须与搜索文本中的对应词进行模式匹配,模式匹配时搜索文本中对应词的出现顺序必须与线索中这些词的顺序一致才算匹配。

例如,在结合了精确词组搜索的模式搜索中,文本 jill john jones 与线索 jyll jonh gones 匹配,但与线索 john jill jones 不匹配。即是说,不论是否还另外指定了模式匹配,顺序始终以精确词组搜索中的顺序为准。

在精确词组搜索中,必须在搜索文本中找到线索(或它的模式匹配)中的所有词。对于缺少一个或多个词的部分匹配不能算作命中。

当使用 SEARCH_TYPE = PHRASE_APPROX 执行搜索时,搜索文本必须包含与线索完全相同的词组、线索中顺序相同的一个或多个词,或者线索中顺序不同的一个或多个词。GBase 8s Excalibur Text Search DataBlade 模块使用词的数量和顺序为所有命中产生文档分数;如果搜索文本中以更接近的顺序出现的词越多,那么分配给它的分数也就越高。

例如,如果线索是“drop many balls”,那么搜索引擎将基于分数产生以下排名:
He can drop many balls                (精确匹配)
He has many balls                     (包含两个与线索顺序相同的词)
He let five balls drop                (包含两个与线索顺序不同的词)
He has many children                  (包含线索中的一个词)
关键字模式搜索的工作方式与使用 SEARCH_TYPE = PHRASE_APPROX 的搜索相似。但是,模式搜索以逐词为基础来添加模式匹配。例如,如果线索是“drop many balls”,那么搜索引擎将产生以下排名:
He can dorp many valls  (假设 dorp 是 drop 的模式匹配项,以此类推)
He has mani balds
He let five galls frop
He has many children 
提示: 针对同一搜索,不要同时执行下列两种操作:将 SEARCH_TYPE 设置为 PHRASE_APPROX;传递 PATTERN_BASIC 或 PATTERN_ALL 调整参数。这样做会导致该类搜索性能极差。
PATTERN_TRANS 和 PATTERN_SUBS 调整参数指示文本搜索引擎考虑调换和替换。与 SEARCH_TYPE 调整参数不同,您不能设置 PATTERN_TRANS 和 PATTERN_SUBS 的值。请改为使用布尔运算符 & 直接将这些调整参数传递给搜索引擎,如以下示例中所示:
SELECT * FROM videos 
WHERE etx_contains(description,
    Row('multimedia' , 'PATTERN_TRANS & PATTERN_SUBS')) ;
该示例针对 multimedia 线索启动模糊搜索。 搜索引擎将返回仅包含一个替换或调换的所有词以及完全与线索匹配的词。下图显示当示例中的查询在 videos 表上运行时生成的命中列表。

图: 使用调整参数的样本文本搜索查询


显示将 PATTERN_TRANS 和 PATTERN_SUBS 调整参数组合用于关键字“multimedia”。videos 表的命中列表是那些包含词“multimedia”、“multymedia”和“mulitmedia”的行。

调整参数 PATTERN_TRANS 和 PATTERN_SUBS 只考虑每个词仅一个字母的调换或替换。