语法
[Directory(directory)][IndexOnly] –Optional
[ForceCollectCount(count)] -Optional
[DBTableName(table name)] –Optional
[DBAdapter(adapter name)]
[DBConnect(connection string)]
CREATE TABLE
table_name
(
{ < column_definition >
| column_name AS computed_column_expression
| < table_constraint > } [ ,...n ]
)
属性
[Directory(directory)]
这个属性指定全文索引在本地的地址。这个属性是必选属性。
全文索引将被建立在这个地址下。[IndexOnly] –Optional
这个属性指定全文数据表为仅仅索引。这个属性是可选属性。
如果设置为仅仅索引,在执行插入,修改和删除语句时只修改索引,而不修改数据本身。这个设置在Rebuild 或者数据库驱动索引时有用。
[ForceCollectCount(count)] –Optional
强制回收数据的记录数,可选属性。
当批量插入时,Hubble.net并不会立即更新索引,而是要到插入数量超过ForceCollectionCount时才更新索引,这样做是为了尽可能提高索引的效率。ForecCollectionCount的默认值为5000. 可以修改这个值为任意正整数。
[DBTableName(table name)] –Optional
数据库中对应表的表名,可选属性。
由于Hubble.net全文索引是和数据库关联的,Hubble.net负责索引,数据库负责存储。如果希望Hubble.net中的表名和数据库的表名不一样,可以通过这个属性来设置。默认情况下,数据库表名和Hubble.net的表名相同。
[DBAdapter(adapter name)]
数据库适配器名,必选属性
在这里指定采用哪种数据库适配器。Hubble.net 目前默认提供MS SQLSERVER 2005/2008 的数据库适配器。用户可以通过实现 IDBAdapter 接口,并通过SP_AddExternalReference 系统存储过程将自己编写的数据库适配器安装到Hubble.net中。
[DBConnect(connection string)]
连接字符串,必选属性
这个属性指定连接数据库适配器对应的数据库的连接字符串。
数据类型
目前支持的数据类型有
Int, TinyInt, SmallInt, BigInt, Float, DateTime, SmallDateTime, Date, NVarchar, Varchar, NChar, Char
其中
datetime 的范围为 .net 中 datetime 数据类型的时间范围,精度为毫秒
smalldatetime 的范围是 1980年1月1日 0:0:0 - 2047年12月31日 23:59:59, 精度为秒
date 的范围是 1年1月1日 - 5883516年1月1日,进度为日
nvarchar, varchar, nchar, char 这四种字符串类型可以支持指定长度和不限长度,不限长度时写成 (max) ,如 nvarchar(max)
如果字符串类型作为非全文方式索引(Untokenized index) 则长度最大为32。
column_definition
列名
同 T-SQL, 如果是关键字,用[]指定列名。
数据类型
见上一节
索引类型-可选
Tokenized
Tokenized 索引类型表示该字段为全文索引字段,如果指定这个类型,必选指定Analyzer,即分析器的名称
Untokenized
Untokenized 索引类型表示该字段为非全文索引字段,通常为一些价格,面积,分类等元数据字段,如果需要在搜索全文是同时过滤元数据,必须将相应元数据字段设置为Untokenized 类型索引字段。
None
默认索引类型,仅存储。
Analyzer
如果索引类型是 Tokenized, 必须通过Analyzer 关键字指定分析器的名称。
如 Analyzer ‘SimpleAnalyzer’, 用户可以通过实现IAnalyzer接口,并通过SP_AddExternalReference 系统存储过程将自己编写的分析器安装到Hubble.net中。
NULL, NOT NULL
Tokenized, Untokenized 类型索引字段必须为 NOT NULL, None 类型索引字段可以为NULL.
Default-可选
指定字段的默认值
PRIMARY KEY
可以在字段定义中指定该字段为主键字段。注意通过Hubble.net设置的主键字段不是聚集索引,而是非聚集唯一性索引。Hubble.net 中表的聚集索引字段为DocId.
DocId 字段
DocId 字段是Hubble.net 为每张表默认建立的字段,用户在编写建表语句是不需要指定这个字段。这个字段为自增长字段且是唯一性聚集性索引。这个字段用于定位指定的记录。
其他约束
Hubble.net 为了简化建表语句,在建表语句中不提供其他约束的定义,如果要这只其他的约束,比如字段的范围等,可以通过SP_ExcuteSql系统存储过程来设置。
示例
1. 简单的新闻表
[Directory('d:\test\news\')]
[DBAdapter('SQLSERVER2005')]
[DBConnect('Data Source=(local);Initial Catalog=Test;Integrated Security=True')]
Create table News
(
Title nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Content nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Time SmallDateTime Untokenized NOT NULL Default '1990-01-01',
Url nvarchar(max)
);
exec SP_ExcuteSql 'News', 'Create index I_Time on news(time) ';
以上建表语句建立一个News全文索引表,全文索引建立在d:\test\news 目录下,这个表和本地SQLSERVER2005或2008 数据库的默认实例中的Test 库中的News表关联。
这个表有四个字段,其中Title, Content 为全文索引字段,Time 为非全文索引字段,Url 为仅存储字段。
表建立完成后,我们通过 SP_ExcuteSql 直接操作SQLSERVER2005 数据库中的Test 数据库,在数据库中建立为Time 字段建立一个非聚集索引,
这个索引在仅仅对Time 进行范围查询时有用。
2. 指定主键
单字段主键
[Directory('d:\test\news\')]
[DBAdapter('SQLSERVER2005')]
[DBConnect('Data Source=(local);Initial Catalog=Test;Integrated Security=True')]
Create table News
(
NewsId int NOT NULL PRIMARY KEY,
Title nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Content nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Time SmallDateTime Untokenized NOT NULL Default '1990-01-01' ,
Url nvarchar(max)
);
这个表中,我们指定NewsId 字段为主键字段
多字段主键
[Directory('d:\test\news\')]
[DBAdapter('SQLSERVER2005')]
[DBConnect('Data Source=(local);Initial Catalog=Test;Integrated Security=True')]
Create table News
(
NewsId int NOT NULL PRIMARY KEY,
NewsType nvarchar(16) UnTokenized NOT NULL PRIMARY KEY,
Title nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Content nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Time SmallDateTime Untokenized NOT NULL Default '1990-01-01' ,
Url nvarchar(max)
);
这个表中,我们指定NewsId 和NewsType字段为主键字段
仅索引
[Directory('d:\test\news\')]
[IndexOnly]
[DBTableName('MyNews')]
[DBAdapter('SQLSERVER2005')]
[DBConnect('Data Source=(local);Initial Catalog=Test;Integrated Security=True')]
Create table News
(
NewsId int NOT NULL PRIMARY KEY,
Title nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Content nvarchar(max) Tokenized Analyzer 'SimpleAnalyzer' NOT NULL Default '',
Time SmallDateTime Untokenized NOT NULL Default '1990-01-01' ,
Url nvarchar(max)
);
该建表语句指定该表仅仅进行索引,并且该表关联的数据库中的表名指定为MyNews.
指定为仅索引后,我们可以通过SP_Rebuild 存储过程,对数据库表MyNews中的索引记录重新创建索引。这种方法一般用于全文索引丢失后的重建。