模糊搜索的文档分数

执行模糊搜索时,文本搜索引擎返回的某些行可能比其他返回行更好地满足搜索条件。要确定线索与所返回的每行之间的相似度,可以指示搜索引擎为每行分配一个值,此值称为文档分数。

GBase 8s Excalibur Text Search DataBlade 模块在分配文档分数时使用以下两条规则:

文档分数的范围为 0 到 100,其中 0 表示不匹配,100 表示完全匹配。0 到 100 之间的值表示近似匹配;值越大,匹配度就越高。null 值表示未对该行进行排名。如果因为 WHERE 子句中的非 etx_contains() 运算符包含一个 OR 谓词而返回某行时,就会出现这种情况。

要访问文档分数信息,请使用语句局部变量 (SLV) 作为 etx_contains() 运算符的可选的第三个参数。SLV 的数据类型是 etx_ReturnType,这是由 GBase 8s 派生的行类型,由两个字段组成。分数信息包含在 score 字段中。

score 字段包含一个数值,用以指示返回的文档与搜索条件的相关程度(与其他建立索引的记录的分数值相比较)。文档的分数值越高,表明文档与条件的匹配度就越高。

可以使用 score 字段,以根据文档与搜索条件的匹配程度对返回的行进行排序。例如,如果 rc 是一个 SLV,那么可以使用它来获取文档分数信息,如以下示例中所示:
SELECT rc.score, id, description FROM videos
    WHERE etx_contains(description,
    Row('multimedia' , 
        'PATTERN_TRANS & PATTERN_SUBS'), rc # etx_ReturnType)
    ORDER BY 1;
下图显示当示例中的查询在 videos 表上运行时生成的命中列表。命中列表中的 score 列包含分数信息。

图: 使用 SLV 的样本文本搜索查询


显示使用 PATTERN_TRANS 和 PATTERN_SUB 调整参数来搜索关键字“multimedia”,以及使用 SLV 来获取分数信息。videos 表的命中列表是一个按排名顺序给出的行列表,其中“multimedia”显示的分数是 100.00,“mulitmedia”和“multymedia”的分数均为 99.00。

SLV 的作用域限定为使用它的语句。 对于 Excalibur 文本搜索引擎来说,这是一种将有关它刚才执行的搜索的信息发送回调用它的 etx_contains() 运算符的方式。

虽然 SLV 的数据类型通常是 etx_ReturnType,但是当您将其用于 etx_contains() 运算符时,您还是必须明确指定它的类型,如上例所示。该示例还显示了如何使用 ORDER BY 子句,以指示数据库服务器按 SLV 的 score 字段对返回的行进行排名。

有关 etx_ReturnType 数据类型及其两个字段,以及如何使用这些字段中包含的信息的更多信息,请参阅 etx_ReturnType 数据类型。有关 SLV 的更常规信息,请参阅《GBase 8s SQL 指南:语法》。