Sql2008 全文索引应用(错误7625)

在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数
据的速度,不用在用LIKE这样低效率的模糊查询了。

下面简明的介绍如何使用Sql2008 全文索引

一、检查服务里面带有Full-text字样的服务是否存在并开启


如果不存在带有Full-text字样的服务的,确认是否安装了sqlserverFullTextSearch

二、为表定义全文索引

 

三、点击定义全文检索,按提示操作

1.点击下一步

2.选择唯一索引,通常是主键

3.选择要建立的全文索引列

 

指定应使用 table 中的所有全文索引列来搜索给定的搜索条件。 除非指定 language_term(通常对于断字符的选择如果列存的是中文就选择chinese,如果是英文就选择English),否则表的所有列的语言都必须相同(不相同在使用CONTAINSTABLE时会出现"7625: 全文表或全文索引视图在其全文索引列中有多个 LCID"错误)。

 

4.选择索引更新方式,可以先自动更新,以后数据量大了可以设置添加全文索引的计划

 

5.新建或选择全文目录

6.点击下一步,直到完成

四、全文索引的SQL查询关键字

建立好全文索引后就可以使用SQL语句来查询了,主要用带三个关键字 CONTAINS、FREETEXT、CONTAINSTABLE和FREETEXTTABLE

1. CONTAINS 

搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是个有意义的词语,比如说“北京”、“电子”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”或者数字 这样的词语即使
LIKE是能查询出来,但全文索引对这样没意义的词语可能没有建立索引,查不出来
 SELECT TOP 20 * from dbo.ClassifyCorrectionEntryHead WHERE CONTAINS (TRADE_NAME,'北京');

实现功能:查询Business表中TRADE_NAME列包含“北京”的行

 

详细参阅:http://msdn.microsoft.com/zh-cn/library/ms187787.aspx

 

2. FREETEXT

 

和CONTAINS类似,不同的是它会先把要查询的词语先进性分词然后在查询匹配项
SELECT TOP 20 ID,DECL_PORT_NAME,TRADE_MODE,TRADE_NAME FROM ClassifyCorrectionEntryHead 
WHERE FREETEXT (TRADE_NAME,'北京科贸电子有限公司');

查询结果

3.CONTAINSTABLE

在 查询方式上与 CONTAINS 几乎一样。但CONTAINSTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用 CONTAINSTABLE 的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。
SELECT TOP 20 ID,DECL_PORT_NAME,TRADE_MODE,TRADE_NAME,RANK,[KEY] FROM ClassifyCorrectionEntryHead B1 
INNER JOIN CONTAINSTABLE(ClassifyCorrectionEntryHead,*,'ISABOUT(北京科贸 WEIGHT(0.8),电子 WEIGHT(0.6))') B2 ON B1.ID=B2.[KEY]
ORDER BY B2.RANK DESC;

查询结果:

ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数。表示不同条件有不同的侧重。
CONTAINSTABLE 返回的表包含有特殊的两列:KEY,RANK。
被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为 KEY。我们通常把它作为表连接的条件。
在某些网站搜索时,结果中会出现表示匹配程度的数字,RANK 与此类似。它的值在0~1000之间,标识每一行与查询条件的匹配程度,程度越高,RANK 的值大,通常情况下,按照 RANK 的降序排列。

4. FREETEXTTABLE

在 查询方式上与 FREETEXT 几乎一样。但 FREETEXTTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用  FREETEXT  的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。
SELECT TOP 20 ID,DECL_PORT_NAME,TRADE_MODE,TRADE_NAME FROM ClassifyCorrectionEntryHead B1 
INNER JOIN FREETEXTTABLE(ClassifyCorrectionEntryHead,TRADE_NAME,'ISABOUT(北京科贸 WEIGHT(0.8),电子 WEIGHT(0.6),有限公司 WEIGHT(0.3))') B2 ON B1.ID=B2.[KEY]
ORDER BY B2.RANK DESC;

查询结果:

 

 
遇到的问题及解决方案:错误7625: 全文表或全文索引视图在其全文索引列中有多个 LCID

SQL server 全文检索使用中有时会遇到下面这个错误:

7625: 全文表或全文索引视图在其全文索引列中有多个 LCID。
English translation: Full-text table or indexed view has more than one LCID among its full-text indexed columns.

 

见外国一帖子, 忘记链接了,照抄如下:

It seems that in your full-text query are querying more than one column and
one of the columns is using a different word breaker. They must all use the
same word breaker or use the same language in your query using the language
predicate.

 

也就是说, 创建全文索引时,在各个字段上设置的分词器的语言不一致,也就是设置多了,应该统一成一种,这样就解决了。

posted on 2015-09-24 11:45  小呀么小二郎  阅读(422)  评论(0编辑  收藏  举报

导航