现在的位置: 首页 > 综合 > 正文

对数据库进行全文检索

2012年11月28日 ⁄ 综合 ⁄ 共 1952字 ⁄ 字号 评论关闭
大家可能都会用
  select * from tb where field like '%关键字%'
  
  但是一旦数据量大用户多,就会造成查询过慢,因此MS提供一种牺牲空间来换取时间的解决方案。
  
  全文检索。原文请看
  
  http://www.microsoft.com/china/msdn/archives/library/dnsql2k/html/sql_fulltextsearch.asp
  
  我对自己的实现加了些注释:
  
  use PopAsk
  --使用这个库
  
  exec sp_fulltext_database 'enable'
  --使这个库允许全文检索
  
  -----以下对Question_Total表操作------
  /*
  首先:要为全文检索目录起个名字,比如Q_ID_Desc
  然后:要确保你这个表必须有个唯一主键,比如我这个Question_Total表,主键名是:PK_Question_Total
  剩下就把要检索的列加进去就可以了。
  */
  exec sp_fulltext_catalog 'Q_ID_Desc', 'create'
  --创建名为Q_ID_Desc的全文检索目录,默认位置。
  
  exec sp_fulltext_table 'Question_Total', 'create', 'Q_ID_Desc', 'PK_Question_Total'
  -- 把Question_Total这个表,创建到全文检索目录中,指定主键。
  
  exec sp_fulltext_column 'Question_Total', 'Title', 'add'
  -- 把Question_Total这个表,要检索的Title列,添加到全文检索中。
  
  exec sp_fulltext_column 'Question_Total', 'Content', 'add'
  -- 把Question_Total这个表,要检索的Content列,添加到全文检索中。
  
  exec sp_fulltext_table 'Question_Total', 'start_full'
  -- 填充全文检索记录。
  
  select FULLTEXTCATALOGPROPERTY('Q_ID_Desc', 'Populatestatus')
  -- 这句可以不用,是检测是否添完状态的,1代表正在进行,0代表完成。
  
  -----以下对另外一个表Answer_Total操作------
  exec sp_fulltext_catalog 'A_ID_Desc', 'create'
  --创建名为A_ID_Desc的全文检索目录,默认位置。
  
  exec sp_fulltext_table 'Answer_Total', 'create', 'A_ID_Desc', 'PK_Answer_Total'
  -- 把Question_Total这个表,创建到全文检索目录中,指定主键。
  
  
  exec sp_fulltext_column 'Answer_Total', 'Answer_Content', 'add'
  -- 把Answer_Total这个表,要检索的Answer_Content列,添加到全文检索中。
  
  exec sp_fulltext_table 'Answer_Total', 'start_full'
  -- 填充全文检索记录。
  
  select FULLTEXTCATALOGPROPERTY('A_ID_Desc', 'Populatestatus')
  -- 这句可以不用,是检测是否添完状态的,1代表正在进行,0代表完成。
  
  /*
  执行下列语句用于检索。
  SELECT *
  FROM FREETEXTTABLE(Question_Total, title, '测试')
  
  SELECT *
  FROM FREETEXTTABLE(Answer_Total, Answer_Content, '测试')
  */
  
  躁声字文件
  
  C:\Program Files\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\noise.chs
  
  我参考别人的做法,只保留了一个?号。
  
  还有数据库默认语言排序规则设置成Chinese_PRC_CI_AS
  
  不要忘记建立一个作业,定时(一般可以每天)为全文检索添加记录。
  exec sp_fulltext_table 'Answer_Total', 'start_full'
  
  exec sp_fulltext_table 'Question_Total', 'start_full'
  -- 填充全文检索记录。

抱歉!评论已关闭.