完整代码如下:
- --显示版本信息
- SELECT?@@VERSION;
- GO
- CREATE?TABLE?FullText_Test
- (
- ??ID?int?IDENTITY(1,1),
- ??DATA?nvarchar(max),??--如果这里使用varchar(max),下面的插入也不带N,那CONTAINS得不到任何记录
- ??CONSTRAINT?PK_ID_FullText_Test?
- ??????PRIMARY?KEY(ID)
- );
- INSERT?FullText_Test(DATA)
- ???VALUES(N'我爱中华人民共和国');
- ???
- INSERT?FullText_Test(DATA)
- ???VALUES(N'china');
- INSERT?FullText_Test(DATA)
- ???VALUES(N'中国');
- GO
- SELECT?*?FROM?FullText_Test;
- --建立全文目录
- CREATE?FULLTEXT?CATALOG?Test_CATALOG
- ??IN?PATH?N'D:/FT_MyTest'
- AS?DEFAULT;
- --建立全文索引
- CREATE?FULLTEXT?INDEX
- ??ON?FullText_Test(DATA?LANGUAGE?'Simplified?Chinese')
- KEY?INDEX?PK_ID_FullText_Test
- ??ON?Test_CATALOG
- WITH?CHANGE_TRACKING?AUTO;
- GO
- --延时5秒
- WAITFOR?DELAY?'00:00:05';
- PRINT?'----中华人民共和国-----'
- SELECT?*
- FROM?FullText_Test
- WHERE?CONTAINS(DATA,'中华人民共和国');
- PRINT?'----中国-----'
- SELECT?*
- FROM?FullText_Test
- WHERE?CONTAINS(DATA,'中国');
- /*查同义词,已将同义词文件tsCHS.xml添加如下节点:
-
<expansion>
-
????<sub>中华人民共和国</sub>
-
????<sub>中国</sub>
-
</expansion>
- */
- --此处查不到中华人民共和国的记录
- PRINT?'----同义词查询-----'
- SELECT?*
- FROM?FullText_Test
- WHERE?CONTAINS(DATA,'FORMSOF(THESAURUS,N''中国'')');
- /*
- 2???china
- 3???中国
- */
- --此处查不到中国的记录
- SELECT?*
- FROM?FullText_Test
- WHERE?CONTAINS(DATA,N''华夏'')');
- /*
- 2???china
- 3???中国
- */
- GO
- --删除测试
- DROP?FULLTEXT?INDEX?ON?FullText_Test;
- DROP?FULLTEXT?CATALOG?Test_CATALOG;
- DROP?TABLE?FullText_Test;
- GO
- /*
- --版本信息
- ------------------------------------
- Microsoft?SQL?Server?2005?-?9.00.1399.06?(Intel?X86)?
- ????Oct?14?2005?00:33:37?
- ????Copyright?(c)?1988-2005?Microsoft?Corporation
- ????Enterprise?Edition?on?Windows?NT?5.2?(Build?3790:?Service?Pack?2)
- ID??????????DATA
- -----------?-------------------------------
- 1???????????我爱中华人民共和国
- 2???????????我爱中国
- (2?行受影响)
- ----中华人民共和国-----
- ID??????????DATA
- -----------?-------------------------------
- 1???????????我爱中华人民共和国
- (1?行受影响)
- ----中国-----
- ID??????????DATA
- -----------?-------------------------------
- 2???????????我爱中国
- (1?行受影响)
- ----同义词查询-----
- ID??????????DATA
- -----------?-------------------------------
- 2???????????我爱中国
- (1?行受影响)
- ID??????????DATA
- -----------?--------------------------------
- 1???????????我爱中华人民共和国
- (1?行受影响)
- */
问题及说明如下:
1,我的2005目录mssql.1的ftdata下无tschema.xml,则从
C:/Program Files/Common Files/System/MSSearch/Data/Config
拷贝一份到ftdata目录下.
2,长期以来mssqlserver全文索引本来就是有问题的,比如一个完整的词可能会搜不到,这来自中文分词的技术问题,无法完美解决。
3,http://support.microsoft.com/kb/923317/zh-tw
依具此页说明,当tsXXX.xml中含有一些字符时会报文件格式非法,这好像也是ms暂未解决的问题。
4,从msdn论坛得知,对于中文同义词库,可能存在同意词之间的一些问题:
比如
两个词被定义为同义词:形如: 中国人民? 和 国人
或? 我去爬山 和 爬山委员会
这样的组可能会报 tsChs.xml 格式非法。
绕开这些问题,我做了一个测试:
- INSERT?FullText_Test(DATA)?VALUES(N'我爱中华人民共和国');
- ?INSERT?FullText_Test(DATA)?VALUES(N'china');?
- 修改tsCHS.xml增加同义词:?
-
<expansion>??
-
<sub>中国</sub>??
-
<sub>china</sub>??
-
</expansion>?
- --在重启msftesql服务之后,填充全文目录。?
- --执行:?
- SELECT?*?FROM?FullText_Test?WHERE?CONTAINS(DATA,N''中国'')');?
- --得到?
- china?
- ---在同义词库中又增加了"华夏"?
- --执行?
- SELECT?*?FROM?FullText_Test?WHERE?CONTAINS(DATA,N''中国'')');
- ?SELECT?*?FROM?FullText_Test?WHERE?CONTAINS(DATA,N''华夏'')');?
- --均得到?
- /*?china?*/?
- ---继续测试,看能否由中文同义词得到中文同义词?
- INSERT?FullText_Test(DATA)?VALUES(N'中国');?
- --当然,在这之后你要重新填充索引目录.?
- --除此之外,你还可以设置变更跟踪,这样就不用在数据记录变动后重新手工或者等时间让它重新填充了。数据负荷大的话,不推荐开启此设置。?
- SELECT?*?FROM?FullText_Test?WHERE?CONTAINS(DATA,N''中国'')');?
- /*?2?china?3?中国?*/?
- --此处查不到中国的记录?
- SELECT?*?FROM?FullText_Test?WHERE?CONTAINS(DATA,N''华夏'')');?
- /*?2?china?3?中国*/
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|