sqlserver2005全文索引与同义词操作目前发现的一些问题,及一个完整的测试

完整代码如下:
  1. --显示版本信息
  2. SELECT @@VERSION;
  3. GO
  4. CREATE TABLE FullText_Test
  5. (
  6.   ID int IDENTITY(1,1),
  7.   DATA nvarchar(max),  --如果这里使用varchar(max),下面的插入也不带N,那CONTAINS得不到任何记录
  8.   CONSTRAINT PK_ID_FullText_Test 
  9.       PRIMARY KEY(ID)
  10. );
  11. INSERT FullText_Test(DATA)
  12.    VALUES(N'我爱中华人民共和国');
  13.    
  14. INSERT FullText_Test(DATA)
  15.    VALUES(N'china');
  16. INSERT FullText_Test(DATA)
  17.    VALUES(N'中国');
  18. GO
  19. SELECT * FROM FullText_Test;
  20. --建立全文目录
  21. CREATE FULLTEXT CATALOG Test_CATALOG
  22.   IN PATH N'D:/FT_MyTest'
  23. AS DEFAULT;
  24. --建立全文索引
  25. CREATE FULLTEXT INDEX
  26.   ON FullText_Test(DATA LANGUAGE 'Simplified Chinese')
  27. KEY INDEX PK_ID_FullText_Test
  28.   ON Test_CATALOG
  29. WITH CHANGE_TRACKING AUTO;
  30. GO
  31. --延时5秒
  32. WAITFOR DELAY '00:00:05';
  33. PRINT '----中华人民共和国-----'
  34. SELECT *
  35. FROM FullText_Test
  36. WHERE CONTAINS(DATA,'中华人民共和国');
  37. PRINT '----中国-----'
  38. SELECT *
  39. FROM FullText_Test
  40. WHERE CONTAINS(DATA,'中国');
  41. /*查同义词,已将同义词文件tsCHS.xml添加如下节点:
  42. <expansion>
  43.     <sub>中华人民共和国</sub>
  44.     <sub>中国</sub>
  45. </expansion>
  46. */
  47. --此处查不到中华人民共和国的记录
  48. PRINT '----同义词查询-----'
  49. SELECT *
  50. FROM FullText_Test
  51. WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''中国'')');
  52. /*
  53. 2   china
  54. 3   中国
  55. */
  56. --此处查不到中国的记录
  57. SELECT *
  58. FROM FullText_Test
  59. WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''华夏'')');
  60. /*
  61. 2   china
  62. 3   中国
  63. */
  64. GO
  65. --删除测试
  66. DROP FULLTEXT INDEX ON FullText_Test;
  67. DROP FULLTEXT CATALOG Test_CATALOG;
  68. DROP TABLE FullText_Test;
  69. GO
  70. /*
  71. --版本信息
  72. ------------------------------------
  73. Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
  74.     Oct 14 2005 00:33:37 
  75.     Copyright (c) 1988-2005 Microsoft Corporation
  76.     Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
  77. ID          DATA
  78. ----------- -------------------------------
  79. 1           我爱中华人民共和国
  80. 2           我爱中国
  81. (2 行受影响)
  82. ----中华人民共和国-----
  83. ID          DATA
  84. ----------- -------------------------------
  85. 1           我爱中华人民共和国
  86. (1 行受影响)
  87. ----中国-----
  88. ID          DATA
  89. ----------- -------------------------------
  90. 2           我爱中国
  91. (1 行受影响)
  92. ----同义词查询-----
  93. ID          DATA
  94. ----------- -------------------------------
  95. 2           我爱中国
  96. (1 行受影响)
  97. ID          DATA
  98. ----------- --------------------------------
  99. 1           我爱中华人民共和国
  100. (1 行受影响)
  101. */

问题及说明如下:
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 格式非法。

绕开这些问题,我做了一个测试:
  1. INSERT FullText_Test(DATA) VALUES(N'我爱中华人民共和国');
  2.  INSERT FullText_Test(DATA) VALUES(N'china'); 
  3. 修改tsCHS.xml增加同义词: 
  4. <expansion>  
  5. <sub>中国</sub>  
  6. <sub>china</sub>  
  7. </expansion> 
  8. --在重启msftesql服务之后,填充全文目录。 
  9. --执行: 
  10. SELECT * FROM FullText_Test WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''中国'')'); 
  11. --得到 
  12. china 
  13. ---在同义词库中又增加了"华夏" 
  14. --执行 
  15. SELECT * FROM FullText_Test WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''中国'')');
  16.  SELECT * FROM FullText_Test WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''华夏'')'); 
  17. --均得到 
  18. /* china */ 
  19. ---继续测试,看能否由中文同义词得到中文同义词 
  20. INSERT FullText_Test(DATA) VALUES(N'中国'); 
  21. --当然,在这之后你要重新填充索引目录. 
  22. --除此之外,你还可以设置变更跟踪,这样就不用在数据记录变动后重新手工或者等时间让它重新填充了。数据负荷大的话,不推荐开启此设置。 
  23. SELECT * FROM FullText_Test WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''中国'')'); 
  24. /* 2 china 3 中国 */ 
  25. --此处查不到中国的记录 
  26. SELECT * FROM FullText_Test WHERE CONTAINS(DATA,'FORMSOF(THESAURUS,N''华夏'')'); 
  27. /* 2 china 3 中国*/



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值