SqlCollections - 全文索引

 1 --==============================全文索引===============================
 2 --创建全文目录
 3 --要创建全文索引前必须先创建全文目录
 4 CREATE FULLTEXT CATALOG TSQL全文目录
 5 WITH ACCENT_SENSITIVITY = ON    --是否区分重音
 6 AS DEFAULT    --默认目录
 7 AUTHORIZATION dbo    --所有者
 8 
 9 --修改全文目录
10 ALTER FULLTEXT CATALOG TSQL全文目录
11 REBUILD    --重新生成全文目录        
12 WITH ACCENT_SENSITIVITY = OFF
13 
14 --删除全文目录
15 DROP FULLTEXT CATALOG TSQL全文目录
16 
17 --创建全文索引
18 --每个表只能有一个全文索引
19 --每个全文目录可以有多个全文索引,每个全文索引只能属于一个全文目录
20 CREATE FULLTEXT INDEX    --全文索引是没有名字的!
21 ON [dbo].[类别](说明)    --ON 表名(字段名)
22 KEY INDEX [aaaaa类别_PK]    --必须指定一个现有的唯一索引
23 ON TSQL全文目录    --ON 全文目录
24 
25 --修改全文索引
26 ALTER FULLTEXT INDEX 
27 ON [dbo].[类别]
28 DISABLE    --禁用
29 
30 --删除全文索引
31 DROP FULLTEXT INDEX ON [dbo].[类别]
32 
33 --填充(更新)全文索引
34 ALTER FULLTEXT INDEX 
35 ON [dbo].[类别]
36 START FULL POPULATION
37 
38 --CONTAINS搜索
39 --单个词搜索
40 SELECT * FROM [dbo].[类别]
41 WHERE CONTAINS(说明,'others')
42 
43 --多词搜索
44 SELECT * FROM [dbo].[类别]
45 WHERE CONTAINS(说明,'"others" or "meat"')    --作为整体字符串传递
46 --WHERE CONTAINS(说明,'others' or 'meat') 是错的!
47 
48 --派生词搜索
49 --注意断字符语言必须是英语等有派生词的语言才起作用
50 --brought也能搜到了
51 SELECT * FROM [dbo].[类别]
52 WHERE CONTAINS(说明, 'FORMSOF(INFLECTIONAL,"bring")')    --注意第2个参数必是字符串    
53 
54 --前缀词搜索
55 --注意只能用*,只能放在字母之后
56 SELECT * FROM [dbo].[类别]
57 WHERE CONTAINS(说明, '"c*"')
58 
59 --加权词搜索
60 --加权值介于0和1之间,加权值越高排名越靠前
61 --加权值对CONTAINS无效,只对CONTAINSTABLE有效!
62 SELECT * FROM [dbo].[类别]
63 WHERE CONTAINS(说明, 'ISABOUT("meat" weight(0.9), 
64                             "others" weight(0.6))')
65 
66 --FREETEXT搜索
67 --精度没有CONTAINS高,只要包含任一字或单词都会检索出来
68 SELECT * FROM [dbo].[类别]
69 WHERE FREETEXT(说明, 'dog meat xxxxx')
70 
71 --CONTAINSTABLE搜索
72 --KEY表示就是创建全文索引时指定的唯一键
73 SELECT * FROM 
74 CONTAINSTABLE([dbo].[类别],说明, 'meat')
75 
76 --目标:查询说明字段中含有某些词的前10条数据,并按权值排序
77 SELECT a.* FROM [dbo].[类别] a
78 JOIN CONTAINSTABLE(
79         [dbo].[类别],说明, 'ISABOUT("coffee" weight(0.9),
80                                     "meat" weight(0.8),
81                                     "dog" weight(0.7))',
82                                     10
83     )b
84 ON a.类别ID = b.[KEY]
85 
86 --FREETEXTTABLE搜索
87 SELECT * FROM [dbo].[类别] a
88 JOIN FREETEXTTABLE([dbo].[类别],说明,'dog meat xxxxx') b
89 ON a.类别ID = b.[KEY]

 

posted on 2014-10-23 12:26  Sky Sun  阅读(206)  评论(0编辑  收藏  举报