这篇文章我来说明一下hubble+sqlserver,在接下来我还会写一篇hubble+mongodb的文章。在这里主要先介绍hubble和MSsqlserver的用法。
1,hubble.net
首先我先来简单介绍一下hubble,hubble主要在项目中的应用还是在全文搜索上,它和lucene有本质的不同,当然各自有各自的优点,而且hubble有逐渐取代lucene的趋势。我自己也进行了一下测试,测试结果待会再说。
简单的先说一下hubble的安装×86的还是64的,选择自己相同的信号下载,安装时候需要注意,需要输入一个key这个是免费获取的,
获取的网站http://www.hubbledotnet.com/key.aspx。填上邮箱很快就发到你邮箱里。
安装完成后,打开hubble提示下图,填上127.0.0.1即可
下图就是进入后的主界面,跟sqlserver很像,用法也很像
接下来你可以选择升级,如果不升级的话,这么用完全没有问题,但是如果你想用hubble+mongodb的话,就得进行升级,升级的方法我在hubble+mongodb里再去写吧,这里就不升级了,用默认的。
下面进行创建数据库点击鼠标右键,在弹出的菜单选择CreateDataBase,如下图:
打开CreateDataBase窗口,填写信息如下(第一个是数据库名称,第二个是数据库位置,第三个是数据库种类,如果是sqlserver2005以上的版本就选择sqlserver2005,最后一个是链接字符串)
在建立的News数据库上单击鼠标右键,在弹出的菜单上选择Create Table项,如下图:
打开Create Table窗口,并填写建表的相关信息(第一个参数是表名,第二个是表的位置,第三个是链接的数据库,最后一个是链接字符串),如下图:
点击Next按钮,并填写相关信息(这是最重要一步),如下图:index model是选择hubble的模式,是主动还是被动(主动和被动在程序中所用的代码是不一样的),主动的意思我简单的说,例如我新建一张hubble表,你再到sqlserver中看一下,数据库中也回自动添加一张表,也就是说用主动模式的话,你如果想要添加数据,直接在hubble进行添加就行了。但是如果是被动(build index from exist table)的话,你如果想要用代码添加数据,你必须同时往sqlserver和hubble里同时添加。一般采用被动的方式的比较多,这种方法比较灵活。exist table name or view name (这个很简单吧,就是表名,但是这里是指的sqlserver里的那个你要关联的表)。incremental model 这个是hubble的模式,从英文意思就能看出来第一个是只能增加,不能修改,所以一般都是选择第二种。
然后点击next 如图(这里面主要说的就是要选择一个字段作ID,手动写在下面。还有就是analyzer,分词器,有三个可以选择,就是不同的分词器,我习惯用pangu,盘古在分中文词汇还是比较好的)
点击next如图(其实就是把我们的操作生成了一个脚本,如果自己特别熟悉hubble的语法后就可以直接用命令输入了,这跟sqlserver是一样的)
提示是否创建索引图如下点击是
点击是后开始创建,如图,点击start开始创建
完成后关闭,hubble的表就创建好了。
HubbleHandler的代码如下
1 internal class HubbleHandler 2 { 3 static string connStr = ConfigurationManager.AppSettings["hubble"];//连接字符串 4 public static void ExecuteNonQuery(string hubbleSql, HubbleParameterCollection parameters) 5 { 6 using (HubbleAsyncConnection conn = new HubbleAsyncConnection(connStr)) 7 { 8 conn.Open(); 9 HubbleCommand matchCmd = new HubbleCommand(hubbleSql, conn); 10 for (int i = 0; i < parameters.Count; i++) 11 matchCmd.Parameters.Add(parameters[i].ParameterName, parameters[i].Value); 12 try { matchCmd.ExecuteNonQuery(); } 13 catch { } 14 } 15 } 16 17 public static DataSet ExecuteSelect(string hubbleSql, HubbleParameterCollection parameters, out int count) 18 { 19 DataSet ds = new DataSet(); count = 0; 20 using (HubbleAsyncConnection conn = new HubbleAsyncConnection(connStr)) 21 { 22 conn.Open(); 23 HubbleDataAdapter adapter = new HubbleDataAdapter(); 24 adapter.SelectCommand = new HubbleCommand(hubbleSql, conn); 25 int cacheTimeout = 10; 26 adapter.SelectCommand.CacheTimeout = cacheTimeout;//秒 27 for (int i = 0; i < parameters.Count; i++) 28 adapter.SelectCommand.Parameters.Add(parameters[i].ParameterName, parameters[i].Value); 29 HubbleCommand cmd = adapter.SelectCommand; 30 try 31 { 32 ds = cmd.Query(cacheTimeout); 33 count = ds.Tables[0].MinimumCapacity; 34 } 35 catch { } 36 } 37 return ds; 38 } 39 40 41 }