SQL Server全文检索查询浅析

方案概要:
  1. 改变文件存储时的文件名
  2. 配置索引服务器,并将索引服务器与MS SQL Server关联。
  3. 修改SQL语句,将进行全文查询语句的内容加入查询条件中
  文件的存储方式:
  为了方便存储以及方便索引,我们将上传的文件存储到一个目录里面,为了保证上传的文件名不重复,采用GUID作为文件名,并且通过这个GUID于数据库记录相关联。同时,文件的后缀还保持原始文件的后缀,让索引服务能够识别该文档。
  配置索引服务
  进入计算机管理(Computer Management)程序(右键”我的电脑”->”管理”),并找到索引服务(Index Service)
  配置索引服务的功能
  (1)右键选择索引服务弹出一个菜单
  (2)选择New->Catalog(新建一个编录)
  设置新增加的编录
  (1)输入编录的名字(这个名字需要与数据库进行关联,要注意命名,这里假设DCSII
  (2)点Browse进入选择索引服务运行目录窗体
  (3)选择前面创建的索引运行目录(任意地方)
  (4)点确定完成本次操作
  在编录创建号以后,需要给编录增加目录
  (1)右键选择刚刚创建的编录
  (2)选择New->Directory(新建目录)
  新建索引目录
  (1)点击Browse进入目录选择页面
  (2)选择要进行全文检索文件的目录
  (3)确定完成本次操作
  完成创建后启动索引服务
  (1)启动索引服务
  (2)索引服务启动成功后索引编录的信息,可以看到编录信息就表示服务已经启动成功。
  将索引服务和SQL数据库关联:
  在SQL 查询分析器(SQL Query Analyer)里执行下面的存储过程
  EXEC sp_addlinkedserver Dcs, -- 连接服务器的名字,到后面查询的时候要用到
  'Index Server',
  'MSIDXS',
  'DCSII' -- 索引服务里新建的编录名字
  索引服务的性能调整方法1
  (1)右键选择索引服务
  (2)选择 All Tasks-> Tune Perrformance
  (3)选择用户自定义
  (4)点击Customize进入性能调整窗体
  (5)将Index和Querying的属性移动到最右边
  (6)点确定完成操作
  性能调整方法2
  如果服务器不需要对整个系统的文件进行索引,可以停止或者删除System编录。
  MSSQL对索引服务器的调用
  1. 通过sql语句查询连接服务器的内容
  SELECT Q.*
  FROM OpenQuery(dcs, --连接服务器名字
  'SELECT FileName, Size, DocAuthor, path --在连接服务器里的sql语句
  FROM SCOPE()
  WHERE CONTAINS(''番号 and abc'') '
  ) AS Q
  2. 因为SQL语句不支持动态输入的字符串,因此查询字符串只好在C#代码里进行拼接
  s.p.
  实不用将文件保存到数据库外面也能实现在数据库里实现全文搜索。具体方案是在SQL Server 2000里安全全文搜索功能,用image字段存储文件内容,并新增一个字段存放文件类型,然后在通过企业管理器新建全文索引项的时候将这两个字段匹配就可以。不过从数据库的/率以及今后数据库备份和恢复的效率上来看,将文件放在数据库的设计不是太好。

(0)

相关推荐

  • SQLServer 全文检索(full-text)语法

    sql server 全文检索有两种搜索方式,一种是contains,另一种是freetext.前者是包含,类似于 like '%关键词%',后者则是将一段文字分词以后对每个词进行搜索. 具体语法: contains: SELECT 字段1,字段2 FROM 表名 WHERE contains(字段,'"词一" or "词二"') 根据查找结果的相似度排序 SELECT 字段1,字段2 FROM 表名 inner join containstable(表名, 字段,

  • 全文检索技术 sql server

    在未做全文检索以前,个人主页只能对Fs_Title(文章标题)字段进行模糊查询(like '%*%'),如果对内容进行模糊查询,速度极慢,有时还可能报错,今天终于有空了,把这个查询做好了,经过测 试,检索一万条纪录不到两秒时间.ENJOY~~ 复制代码 代码如下: use  LuanLuanDB exec sp_fulltext_database 'enable' exec sp_fulltext_catalog 'ArtileFullText', 'create', 'E:\SearchPag

  • SqlServer 2005 简单的全文检索

    复制代码 代码如下: --查看当前数据库状态 1为已经启用了全文索引 SELECT DATABASEPROPERTY ('数据库名','IsFulltextEnabled') --打开FullText功能 execute sp_fulltext_databse 'enable' --关闭此功能 execute sp_fulltext_databse 'disable' --创建全文索引目录 --删除全文目录 DROP FULLTEXT 目录名 CREATE FULLTEXT CATALOG 目录

  • SQL Server 2005 中做全文检索的方法分享

    /*打开全文索引支持,启动SQL Server的全文搜索服务 */ execute sp_fulltext_database 'enable' /*创建全文目录*/ EXEC SP_FULLTEXT_CATALOG 'FT_testData','CREATE' /*建立全文索引数据元*/ EXEC sp_fulltext_table 'Hc_Book_Book','CREATE','FT_testData','PK_Hc_Book_BookInfo' /*添加支持全文索引的列名*/ EXEC s

  • SQL Server全文检索查询浅析

    方案概要: 1. 改变文件存储时的文件名 2. 配置索引服务器,并将索引服务器与MS SQL Server关联. 3. 修改SQL语句,将进行全文查询语句的内容加入查询条件中 文件的存储方式: 为了方便存储以及方便索引,我们将上传的文件存储到一个目录里面,为了保证上传的文件名不重复,采用GUID作为文件名,并且通过这个GUID于数据库记录相关联.同时,文件的后缀还保持原始文件的后缀,让索引服务能够识别该文档. 配置索引服务 进入计算机管理(Computer Management)程序(右键"我的

  • 在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句写法

    今天在写程序的时候,需要生成从开始id到结束id的sql语句.原来不需要这个功能现在就需要了. 在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句如何写? 如:在SQL SERVER中查询数据库中第10条至30条之间的数据SQL语句如何写? ------解决方案-------------------- select top 20 * from 表 where id in (select top 30 id from 表 order by id)order by id desc

  • SQL Server模糊查询的常见方法总结

    在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符,利用"_"号可以作为通配符组成匹配模式进行查询."_"符号可以放在查询条件 的任意位置,且只能代表一个字符. 例如:查询数学成绩在大于或等于80的同学 selecT * FROM StuScore WHERE Math_Score like '8_' 2利用%通配符

  • SQL Server子查询的深入理解

    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用表达式的地方都可以使用子查询. 1.1语法规则: 子查询的select查询总使用圆括号括起来不能包括compute或for browse子句如果同时指定top子句,则可能只包括order by子句子查询最多嵌套32层,个别查询可能会不支持32层嵌套任何可以使用表达式的地方都可以使用子查询,主要它返回

  • SQL Server连接查询的实用教程

    前沿小补充 例3.48 查询平均成绩大于等于80分的学生学号和平均成绩 SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)>=80 GROUP BY Sno; SELECT * FROM SC; 此时发现: 这是因为WHERE子句中是不能用聚集函数作为条件表达式的,正确的查询语句应该是: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=80; SELECT * FROM SC;

  • 在SQL Server中查询资料库的TABLE数量与名称的sql语句

    在SQL Server中 每一个database裡都有一个系统所产生的table sysobjects这一个table中记录了database中所有的table名称 我们可以用下面的SQL语法作查询的动作 复制代码 代码如下: Select Name,id from sysobjects where xtype = 'U' 其中xtype='U'代表使用的table,若是使用xtype='S' 则代表系统预设的table 在系统table中还有一个名叫syscolumns的table 他记录了栏

  • SQL Server简单查询示例汇总

    前言 本节我们讲讲一些简单查询语句示例以及需要注意的地方,简短的内容,深入的理解. EOMONTH 在SQL Server 2012的教程示例中,对于Sales.Orders表的查询,需要返回每月最后一天的订单.我们普遍的查询如下 USE TSQL2012 GO SELECT orderid, orderdate, custid, empid FROM Sales.Orders WHERE orderdate = DATEADD(MONTH, DATEDIFF(MONTH, '19991231'

  • SQL Server 2016 查询存储性能优化小结

    作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在一切已经改变,SQL Server开始糟糕, 疯狂的事情不能解释.在这个情况下我介入,分析下整个SQL Server的安装,最后用一些神奇的调查方法找出性能问题的根源. 但很多时候问题的根源是一样的:所谓的计划回归(Plan Regression),即特定查询的执行计划已经改变.昨天SQL Serv

  • SQL Server中查询结果超出了查询时间范围解决方法

    废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子. USE AdventureWorks2014; GO SELECT * FROM [Person].[Person] WHERE ModifiedDate >= '2008-11-26 00:00:00:000' AND ModifiedDate <= '2008-11-26 23:59:59.999' 其实如果细看过文档的话,应该

  • SQL Server实现查询每个分组的前N条记录

    SQL语句查询每个分组的前N条记录的实现方法: 1.生成测试数据: #T if object_id('tempdb.dbo.#T') is not null drop table #T; create table #T (ID varchar(3), GID int, Author varchar(29), Title varchar(39), Date datetime); insert into #T select '001', 1, '邹建', '深入浅出SQLServer2005开发管理

随机推荐