zoukankan      html  css  js  c++  java
  • 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吧
  • 相关阅读:
    android中设置快捷键方法setShortcut参数的说明
    LayoutInflater
    Java读取文本文件中文乱码问题 .转载
    eclipse+ADT 进行android应用签名详解
    实验课表
    程序员技术练级攻略
    超过4000长度的字符串如何添加到oracle数据库中
    Hive sql创建表以及插入分区表
    Hive Sql 时间格式化处理
    oracle如何查询分区表所占空间大小
  • 原文地址:https://www.cnblogs.com/sixiangqimeng/p/3081435.html
Copyright © 2011-2022 走看看