询问一下SQL SERVER 2008 R2版本,建立全文索引后,搜索不到结果的问题;

jadesun 2013-01-14 02:20:26
测试脚本如下:

--创建数据库
CREATE DATABASE HnAirDocumentContentSys COLLATE Latin1_General_CI_AS
GO

--切换到相应的数据库
USE HnAirDocumentContentSys
GO

--创建数据表
CREATE TABLE Document_Content
(
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
[Controller_Id] [uniqueidentifier] NOT NULL,
[DocumentContent] VARBINARY(MAX) NULL,
[FileType] VARCHAR(50)
)
GO

--创建唯一索引
CREATE UNIQUE INDEX UQ_tb_Company_cpName ON Document_Content(Id)
GO

--为全文索引启用数据库
EXEC sp_fulltext_database 'enable'

--创建一个叫My_FullDif的全文目录
EXEC sp_fulltext_catalog 'My_FullDir', 'create'

--为全文索引标记表
EXEC sp_fulltext_table 'Document_Content','create','My_FullDir','PK_tb'

--创建全文索引
EXEC sp_fulltext_column 'Document_Content','DocumentContent','add',0x0804,'FileType'

GO

--插入测试数据
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农场A' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('B中国国营农场' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农C场' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国D国营农场' AS VARBINARY(MAX)), 'doc'

GO

--填充全文索引
EXEC sp_fulltext_table 'Document_Content','start_full'

--延时一下,等填充完成
WAITFOR DELAY '00:00:6'
GO

--查询数据
SELECT * FROM Document_Content WHERE contains([DocumentContent],'"国营"')

--删除测试数据库
USE MASTER
GO

DROP DATABASE TEST
...全文
351 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2013-01-15
  • 打赏
  • 举报
回复
指定正确的排序就行了
CREATE DATABASE HnAirDocumentContentSys COLLATE Chinese_PRC_CI_AS
jadesun 2013-01-15
  • 打赏
  • 举报
回复
VARBINARY的类型,能不能进行全文检索呢?
jadesun 2013-01-14
  • 打赏
  • 举报
回复
顶上去,给各位大牛出出主意。
jadesun 2013-01-14
  • 打赏
  • 举报
回复
各位,你们在做项目时,也应该遇上将pdf或者doc存储到数据库中的情况,这类的文档怎么进行全文索引? 另外版主提的要求已经修改完成,使用后面的SQL语句可进行测试。
szm341 2013-01-14
  • 打赏
  • 举报
回复
怎么说呢,如果是中文的话,那可能是你的数据编码有问题 CREATE DATABASE HnAirDocumentContentSys COLLATE Latin1_General_CI_AS CREATE DATABASE HnAirDocumentContentSys COLLATE Chinese_PRC_CI_AS 如果说十六进制的查询,还真不知道怎么比较呵呵
中国风 2013-01-14
  • 打赏
  • 举报
回复
检查你的语句,别贴一些有问题的语句出来 在表里建了唯一约束会生成对应的唯一索引 PK_tb--这是那个表的主健 --为全文索引标记表 EXEC sp_fulltext_table 'Document_Content','create','My_FullDir','PK_tb'
jadesun 2013-01-14
  • 打赏
  • 举报
回复
另外,由于项目原因,必须要把内容存储成VARBINARY格式。这样的全文索引应该支持啊。修改后的测试代码如下:

USE MASTER
GO

--创建数据库
CREATE DATABASE HnAirDocumentContentSys COLLATE Latin1_General_CI_AS
GO
 
--切换到相应的数据库
USE HnAirDocumentContentSys
GO
 
--创建数据表
CREATE TABLE Document_Content
(
	[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE, 
	[Controller_Id] [uniqueidentifier] NOT NULL,
	[DocumentContent] VARBINARY(MAX) NULL,
	[FileType] VARCHAR(50)
)
GO

--创建唯一索引
CREATE UNIQUE INDEX UQ_Document_Content_Id ON Document_Content(Id)
GO

--为全文索引启用数据库
EXEC sp_fulltext_database 'enable'
 
--创建一个叫My_FullDif的全文目录
EXEC sp_fulltext_catalog 'My_FullDir', 'create' 
 
--为全文索引标记表
EXEC sp_fulltext_table 'Document_Content','create','My_FullDir','UQ_Document_Content_Id'
 
--创建全文索引
EXEC sp_fulltext_column 'Document_Content','DocumentContent','add',0x0804,'FileType'

GO
 
--插入测试数据
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农场A' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('B中国国营农场' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农C场' AS VARBINARY(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国D国营农场' AS VARBINARY(MAX)), 'doc'

GO

--填充全文索引
EXEC sp_fulltext_table 'Document_Content','start_full'
 
--延时一下,等填充完成
WAITFOR DELAY '00:00:6'
GO
 
--查询数据
SELECT * FROM Document_Content WHERE contains([DocumentContent],'"国营"')
 
--删除测试数据库
USE MASTER
GO
 
DROP DATABASE HnAirDocumentContentSys
jadesun 2013-01-14
  • 打赏
  • 举报
回复
测试这样的代码,也找不到具体的内容

USE MASTER
GO

--创建数据库
CREATE DATABASE HnAirDocumentContentSys COLLATE Latin1_General_CI_AS
GO
 
--切换到相应的数据库
USE HnAirDocumentContentSys
GO
 
--创建数据表
CREATE TABLE Document_Content
(
	[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE, 
	[Controller_Id] [uniqueidentifier] NOT NULL,
	[DocumentContent] VARCHAR(MAX) NULL,
	[FileType] VARCHAR(50)
)
GO

--创建唯一索引
CREATE UNIQUE INDEX UQ_Document_Content_Id ON Document_Content(Id)
GO

--为全文索引启用数据库
EXEC sp_fulltext_database 'enable'
 
--创建一个叫My_FullDif的全文目录
EXEC sp_fulltext_catalog 'My_FullDir', 'create' 
 
--为全文索引标记表
EXEC sp_fulltext_table 'Document_Content','create','My_FullDir','UQ_Document_Content_Id'
 
--创建全文索引
EXEC sp_fulltext_column 'Document_Content','DocumentContent','add',0x0804

GO
 
--插入测试数据
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农场A' AS VARCHAR(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('B中国国营农场' AS VARCHAR(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国国营农C场' AS VARCHAR(MAX)), 'doc'
INSERT Document_Content SELECT NEWID(),NEWID(), CAST('中国D国营农场' AS VARCHAR(MAX)), 'doc'

GO

--填充全文索引
EXEC sp_fulltext_table 'Document_Content','start_full'
 
--延时一下,等填充完成
WAITFOR DELAY '00:00:6'
GO
 
--查询数据
SELECT * FROM Document_Content WHERE contains([DocumentContent],'"国营"')
 
--删除测试数据库
USE MASTER
GO
 
DROP DATABASE HnAirDocumentContentSys
szm341 2013-01-14
  • 打赏
  • 举报
回复
你把汉字都转换成 16进制格式了,那还能找得到啊
数据库设计规范-编码规范 数据库设计规范-编码规范全文共25页,当前为第1页。数据库设计规范-编码规范全文共25页,当前为第1页。数据库编码规范 数据库设计规范-编码规范全文共25页,当前为第1页。 数据库设计规范-编码规范全文共25页,当前为第1页。 1 目的 为了统一公司软件开发的设计过程中关于数据库设计时的命名规范和具体工作时的编程规范,便于交流和维护,特制定此规范。 2 范围 本规范适用于全体开发人员,作用于软件项目开发的数据库设计、维护阶段。 3 术语 Ø 数据库对象:在数据库软件开发中,数据库服务器端涉及的对象包括物理结构和逻辑结构的对象。 Ø 物理结构对象:是指设备管理元素,包括数据文件和事务日志文件的名称、大小、目录规划、所在的服务器计算极名称、镜像等,应该有具体的配置规划。一般对数据库服务器物理设备的管理规程,在整个项目/产品的概要设计阶段予以规划。 Ø 逻辑结构对象:是指数据库对象的管理元素,包括数据库名称、表空间、表、字段/域、视图、索引、触发器、存储过程、函数、数据类型、数据库安全性相关的设计、数据库配置有关的设计以及数据库中其他特性处理相关的设计等。 4 设计概要 4.1 设计环境 a) ORACLE 11G R2 数据库 ORACLE 11G R2 操作系统 LINUX 6以上版本,显示图形操作界面 b) MS SQL SERVER 2005 数据库设计规范-编码规范全文共25页,当前为第2页。数据库设计规范-编码规范全文共25页,当前为第2页。数据库 SQL SERVER 2005 企业版 打sp3以上补丁和安全补丁 操作系统 WINDOWS 2008 SERVER 4.2 设计使用工具 a) 使用PowerDesigner 做为数据库的设计工具,要求为主要字段做详尽说明。对于SQL Server 尽量使用企业管理器对数据库进行设计,并且要求对表,字段编写详细的说明(这些将作为扩展属性存入SQL Server中) b) 通过PowerDesigner 定制word格式报表,并导出word文档,作为数据字典保存,格式。(PowerDesigner v10 才具有定制导出word格式报表的功能)。对于SQL Server 一旦在企业管理器进行数据库设计时加入扩展属性,就可以通过编写简单的工具将数据字典导出。 c) 编写数据库建数据库、建数据库对象、初始化数据脚本文件 4.3 设计原则 a) 采用多数据文件 b) 禁止使用过大的数据文件,unix系统不大于2GB,window系统不超过500MB c) oracle数据库中必须将索引建立在索引表空间里。 d) 基本信息表在建立时就分配足够的存储空间,禁止其自动扩展功能 e) 大文本字列、blob列要独立出一张表,此表只有id和blob(或大文本)列 f) 为每一个数据库创建独立的管理员用户,使用该用户进行设计,尽量不要使用sa或者系统管理员身份进行数据库设计。 4.4 设计的更新 a) 在设计阶段,由数据库管理员或指定的项目组其一成员进行维护。 b) 运行阶段,由数据库管理员进行维护。 c) 如对表结构进行修改,应先在数据字典文档进行修改,最后在数据库中进行修改。如果修改的是数据库字典表,必须由数据库管理员进行。 数据库设计规范-编码规范全文共25页,当前为第3页。数据库设计规范-编码规范全文共25页,当前为第3页。d) 编写更新的SQL代码,如果使用PowerDesigner,禁止由PowerDesigner直接连数据库进行数据库操作(如果是更改表或者字段的说明性文字可以通过数据库管理器图形界面进行修改) e) 修改数据库要通过SQL,禁止其它方式对数据进行修改 f) 修改数据库的SQL要添加说明后保存备查 5 命名总体原则 Ø 设定的前缀一律用小写字母 Ø 标识名称命名全部小写 Ø 整个命名的全长不得超过30个字母 Ø 全部使用字母和下划线'_',不能使用中文和其他字符,有特别情况允许使用末尾数字编号。例如:t_Finace1, t_Finace2... Ø 命名名称来自于业务,全部采用英文单词 Ø 英文单词过长可以采用通用的缩写,尽量表达出业务的含义 Ø 如需要两个以上的英文单词做标识名称,单词之间要用下划线'_'连接 Ø 名称全是由名词组成的,名词由大范围到小范围排序取名 Ø 完成某功能的名称,如函数和过程,以动宾形式取名 6 命名规范(逻辑对象) 6.1 数据库结构命名 a) 数据库命名 数据库的命名要求使用与数据库意义相关联的英文字母,即<业务系统名称>。 例如:china care 数据库的命名为ccnet; 客户资料数据库的命名为Customer_Info。 b) 数据库日志设计命名 数据库设计规范-编码规范全文共25页,当前为第4页。

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧