使用 HIGHLIGHT 函数

提供了两个 SQL 表值函数,它们都称为 db2ext.textsearch。要使用 db2ext.highlight 函数,必须使用带有附加 numberOfHitshitInformation 参数的 db2ext.textsearch 函数。

在此示例中,会调用 db2ext.highlight 函数来显示整个文档,且不会突出显示由 db2ext.textsearch 函数找到的任何匹配项。

select  p.docid,
db2ext.highlight(p.comment, t.hitinformation, ' WINDOW_NUMBER = 0 ')
          as highlight 
from DB2EXT.TEXTTAB p,
table (db2ext.textsearch('"bestseller" | "peacekeeping" | "soldiers"
     | "attention"', 'DB2EXT', 'COMMENT', 0, 20,
          cast(NULL as INTEGER), 10)) t
where p.docid = t.primkey and p.docid = 2

搜索自变量将返回以下结果:

DOCID HIGHLIGHT

2     A New York Times bestseller about peacekeeping soldiers called
      "Keepers" who devise a shocking scheme to get the worlds
      attention after their tour of duty ends.

1 record(s) selected.
注意

在所有 db2ext.highlight 示例中,表函数 db2ext.textsearch 搜索下列单词中的任何一项:“bestseller”、“peacekeeping”、“soldiers”或“attention”。

在此示例中,会调用 db2ext.highlight 函数来显示整个文档,并且突出显示由 db2ext.textsearch 函数找到的所有匹配项。

select  p.docid,
db2ext.highlight(p.comment, t.hitinformation, ' WINDOW_NUMBER = 0,
          TAGS = ("<bf>", "</bf>" ) ') as highlight 
from DB2EXT.TEXTTAB p,
table (db2ext.textsearch('"bestseller" | "peacekeeping" | "soldiers"
     | "attention"', 'DB2EXT', 'COMMENT', 0, 20,
          cast(NULL as INTEGER), 10)) t
where p.docid = t.primkey and p.docid = 2

搜索自变量将返回以下结果:

DOCID HIGHLIGHT

2     A New York Times <bf>bestseller</bf> about <bf>peacekeeping</bf>
<bf>soldiers</bf> called "Keepers" who devise a shocking scheme to
      get the worlds <bf>attention</bf> after their tour of duty ends.

1 record(s) selected.

在此示例中,会调用 db2ext.highlight 函数来最多显示文档的 10 个部分(窗口)。每个窗口大小为 24,在匹配项的每一边大约具有 12 个字节的数据。此外,将突出显示由 db2.textsearch 表函数找到的匹配项。

select  p.docid,
db2ext.highlight(p.comment, t.hitinformation, ' WINDOW_NUMBER = 10,
          WINDOW_SIZE = 24, TAGS = ("<bf>", "</bf>" ) ') as highlight
from DB2EXT.TEXTTAB p,
table (db2ext.textsearch('"bestseller" | "peacekeeping" | "soldiers"
     | "attention"', 'DB2EXT', 'COMMENT', 0, 20,
          cast(NULL as INTEGER), 10)) t
where p.docid = t.primkey and p.docid = 2

搜索自变量将返回以下结果:

DOCID HIGHLIGHT

2     York Times <bf>bestseller</bf> about <bf>peacekeeping</bf> ...
      <bf>peacekeeping</bf> <bf>soldiers</bf> called "Keepers" ... the
      worlds <bf>attention</bf> after their

1 record(s) selected.

找到的第一个匹配项为 <bf>bestseller</bf>,此匹配项将确定第一个窗口。第二个匹配项 <bf>peacekeeping</bf> 与第一个匹配项只相隔 8 个字节,会将它完全放置在第一个窗口中。第三个匹配项 <bf>soldiers</bf> 在第一个窗口外边,它将确定新窗口。由于第二个匹配项 <bf>peacekeeping</bf> 只与 <bf>soldiers</bf> 匹配项的左边相隔 2 个字节,因此,也会将它放置在第二个窗口中,并进行突出显示。第四个匹配项 <bf>attention</bf> 在第二个窗口外部,所以它将确定新窗口。由于此窗口中没有包含任何先前的或附加的匹配项,因此,该窗口中只包含匹配项附近的数据。

另外,因为没有指定任何 WINDOW_SEPARATOR,所以采用缺省窗口分隔符“...”来分隔这三个文档窗口。

注意

为了确保在使用 db2ext.highlight 函数时具有高性能,用户应限制 db2ext.textsearch 表值函数中的搜索结果。

有关这些参数进一步的详细信息,请参阅 DB2EXT.HIGHLIGHT