hubble+sqlserver

这篇文章我来说明一下hubble+sqlserver,在接下来我还会写一篇hubble+mongodb的文章。在这里主要先介绍hubble和MSsqlserver的用法。

1,hubble.net

首先我先来简单介绍一下hubble,hubble主要在项目中的应用还是在全文搜索上,它和lucene有本质的不同,当然各自有各自的优点,而且hubble有逐渐取代lucene的趋势。我自己也进行了一下测试,测试结果待会再说。

简单的先说一下hubble的安装,hubble的下载地址:http://hubbledotnet.codeplex.com/releases/view/44680 。注意你的机器,是×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项,如下图:

创建News表

打开Create Table窗口,并填写建表的相关信息(第一个参数是表名,第二个是表的位置,第三个是链接的数据库,最后一个是链接字符串),如下图:

创建News表

点击Next按钮,并填写相关信息(这是最重要一步),如下图:index model是选择hubble的模式,是主动还是被动(主动和被动在程序中所用的代码是不一样的),主动的意思我简单的说,例如我新建一张hubble表,你再到sqlserver中看一下,数据库中也回自动添加一张表,也就是说用主动模式的话,你如果想要添加数据,直接在hubble进行添加就行了。但是如果是被动(build index from exist table)的话,你如果想要用代码添加数据,你必须同时往sqlserver和hubble里同时添加。一般采用被动的方式的比较多,这种方法比较灵活。exist table name or view name (这个很简单吧,就是表名,但是这里是指的sqlserver里的那个你要关联的表)。incremental model 这个是hubble的模式,从英文意思就能看出来第一个是只能增加,不能修改,所以一般都是选择第二种。

创建News表

然后点击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     }
View Code

这样的话,你就可以根据hubble里所连接sqlserver的数据进行查询了。查询的一些基本语句,模糊匹配有match和contains

select top 10 * from News where title match '你好^1000^0 北京^1000^2' order by score desc
这里要说的有很多,单词分量后面跟的参数^1000^0 含义如下,第一个参数表示这个单词分量的权值,这里为1000。第二个参数表示这个单词分量在输入的被搜索的句子中的其实位置,如这里“你好”的位置为0,”北京“的起始位置为 2.
排列安装score进行排列,这个score是什么呢?这是hubble搜索的一个匹配度进行计算所得出来的分数。这个分数是根据hubble所独有的算法,这个算法我就不再多说了,有兴趣的同学可以自己去研究一下,我之前说过lucene逐渐被hubble取代,跟这个算法也是有关系的。hubble的算法是根据lucene算法
升级得来的,所以hubble在搜索的匹配度上要高于lucene。而且在速度上来说,我测试了5万次,所得的结论是hubble要比lucene稍微快一点,当然,我测试的也是很片面的,只是使用一个关键词进行搜索,没有多词搜索。
hubble对多个词进行批评语句:select * from News where title^2 match '你好^1000^0 北京^1000^2' or content match '你好^1000^0 北京^1000^2' order by score desc .这个语句跟前面差不多,相信一看就能明白。

相信你也会用hubble+sqlserver了。过些天在写hubble+mongodb吧
原文地址:https://www.cnblogs.com/sixiangqimeng/p/3081435.html