IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

使用 DB2 Text Search 进行全文本搜索

DB2 Text Search 基本特性入门

developerWorks
前一页第 4 页,共 11 页后一页

文档选项

讨论

样例代码


对本教程的评价

帮助我们改进这些内容


使用 DB2 Text Search 进行搜索

下面这些内建的 DB2 搜索函数可用于 DB2 中的全文本搜索:

  • 用 CONTAINS() 或 xmlcolumn-contains() 查询一个单词或短语
  • 用 SCORE() 获得一个文档的相关度

单词或短语可以用布尔操作符(AND、OR 和 NOT)进行组合,也可以用通配符(? 和 *)进行修饰,以限制或扩展搜索范围。

纯文本中的搜索

使用 CONTAINS 关键词提交一个搜索查询:


清单 12. 文本搜索的基本语法
					
SELECT author, year, substr(title,1,30)  
FROM books 
WHERE CONTAINS(title, 'mountain') = 1



AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops
Sam Climber                           1966 Top of the Mountain: Mountain

  2 record(s) selected.

CONTAINS 函数搜索文本索引以查找指定的搜索参数,并返回结果提示是否发现匹配项。如果文档包含与搜索参数匹配的项,则结果为 1,否则结果为 0。

DB2 Text Search 在搜索中自动使用派生形式。在前面的例子中,搜索不仅返回词语 “mountain”,还返回 “mountains” 以及其他派生词。

要发现包含单词组合的行,可以使用操作符 AND、OR 和 NOT,以包括或排除行,其中 AND 默认用于组合多个词。下面的查询返回在列 title 中同时包含词 “mountain” 和 “top” 的行,而不管每个词出现在列中的什么地方。


清单 13. 在文本搜索函数中使用默认的布尔操作符 AND
					
SELECT
  author, year, substr(title,1,30)  
 FROM books WHERE CONTAINS(title, 'mountain top') = 1 
 
 
AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops
Sam Climber                           1966 Top of the Mountain: Mountain

  2 record(s) selected.

注意,将词放入引号中将导致只搜索精确的短语 “mountain tops”:


清单 14. 对搜索参数使用引号查找精确的匹配项
					
SELECT 
  author, year, substr(title,1,30) 
   FROM books WHERE CONTAINS(title, '"mountain tops"') = 1
   
   
AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops

  1 record(s) selected.

通配符 ?(用于单个字符)和 *(用于多个字符)返回与搜索词部分匹配的文档:


清单 15. 使用通配符进行搜索
					
SELECT
 author, year, substr(title,1,30)  
 FROM books WHERE CONTAINS(title, 'comp*') = 1


AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Samantha Smitt                        2001 The Database Compendium

  1 record(s) selected.


应避免在搜索词的开头使用通配符,因为这对查询性能有明显的负面影响。

如果想获取结果示例,可以用 RESULTLIMIT 参数限制文档的数量:


清单 16. 用 RESULTLIMIT 参数限制文档的数量
					
SELECT 
author, year, substr(title,1,30) 
 FROM books WHERE CONTAINS(title, 'mountain', 'RESULTLIMIT=1') = 1 


AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops

  1 record(s) selected.

根据相关度获取结果

使用 SCORE 函数确定一条结果相对于其他结果与搜索词的匹配程度。


清单 17. 通过使用 SCORE 函数获得文档的相关度
					
SELECT 
 title FROM books 
 WHERE CONTAINS(title, 'mountain') = 1  ORDER BY SCORE(title, 'mountain') DESC 
 
 
TITLE
-------------------------------------------------------------------
Top of the Mountain: Mountain Lore
Climber's Mountain Tops

  2 record(s) selected. 

一个文档的得分由一个介于 0 到 1 之间的值表示,它考虑了搜索词在文档中出现的次数,并且与结果集中的其他文档进行比较,也就是说,它是针对当前结果集动态计算出来的。

搜索 XML 文档

可以使用一些不同的选项在 XML 文档中进行搜索:

  • 使用 SQL/XML 进行搜索:


    清单 18. 结合 XMLQUERY() 使用文本搜索功能
    							
    SELECT 
    xmlquery('$bi//author' passing bookinfo as "bi")  
    FROM books WHERE contains(bookinfo, 'range')=1 
     
     
    1
    -------------------------------------------------------------------
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
      3 record(s) selected.
      
    

  • 使用 XQuery 进行搜索:


    清单 19. XQuery 上下文中的文本搜索
    							
    xquery db2-fn:xmlcolumn-contains('BOOKS.BOOKINFO', 'range')/bookinfo/author
     
    
     1
     -------------------------------------------------------------------
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
      3 record(s) selected.
        
    

  • 使用 XPath 子句进行搜索:


    清单 20. 使用 XPath 表达式的文本搜索
    							
    Example: 1
    SELECT 
    author, year, substr(title,1,30) FROM books 
    WHERE contains(bookinfo, '_cnnew1@xpath:''/bookinfo/story [.contains("range")]''')=1 
    
    
    
    AUTHOR                         YEAR        3
    ------------------------------ ----------- ------------------------------
    Joe Climber                           1995 Climber's Mountain Tops
    Joe Smith                             1991 The Range
    Samantha Smitt                        2001 The Database Compendium
    
      3 record(s) selected.    
    
    Example: 2
    
    xquery 
    db2-fn:xmlcolumn-contains(
     'BOOKS.BOOKINFO','@xpath:''/bookinfo/story[.contains("range")]''')/bookinfo/author
    
    
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
    
      3 record(s) selected
    





回页首



前一页第 4 页,共 11 页后一页
    关于 IBM 隐私条约 联系 IBM 使用条款