【转载】开源搜索引擎HubbleDotNet图解之基础使用

开源搜索引擎HubbleDotNet图解之基础使用

一、HubbleDotNet简介

二、HubbleDotNet的下载安装以及升级

三、HubbleDotNet的使用

四、HubbleDotNet的常见问题及解决方法

 

一、HubbleDotNet简介

HubbleDotNet是基于.net平台下开发的一款免费的数据库全文搜索引擎,为开源项目(开源协议是Apache2.0)。作者eaglet(肖波)有10多年的底层开发经验,非常熟悉Lucene等搜索引擎架构,曾开发过多款Lucene.net平台下的中文分词组件如大名鼎鼎的盘古分词。其HubbleDotNet项目经过两年多的潜心开发,目前最新版本是0.9.5.0,别看版本号小,但已非常完善了。

目前的一些主流数据库都提供了FullText Search(全文搜索)功能,但其全文搜索的功能相对较弱,对于中文的搜索效果不理想,无法很好的满足实际应用需要,而一些全文搜索组件,比如比较著名的Lucene,则只提供了全文搜索功能,而缺乏和关系数据库的关联,且Lucene.net的索引文件的更新和维护很不方便,删除+重新添加=更新的索引修改方式非常糟糕。HubbleDotNet是集全文搜索和关系查询于一体的新型“数据库”系统,用户可以方便的通过SQL语句对Hubble的“数据库”(即索引库)进行全文搜索或关系查询甚至全文+关系的查询。

如何您对数据库自带的全文搜索功能不满意或对Lucene.net的索引维护感到力不从心的时候,您真的应该尝试使用HubbleDotNet来构建您的全文搜索。

二、HubbleDotNet的下载安装以及升级

写稿时HubbleDotNet项目网站上提供正式安装版是0.8.3.0的,需要另外下载的最新版(如0.9.5.0)的项目源文件,本地编译一下获取最新组件,覆盖到0.8.3.0的安装目录下完成升级。

项目网址:http://hubbledotnet.codeplex.com/(不要以为是英文的就是老外的东东哦,^_^)

0.8.3的安装程序下载地址:http://hubbledotnet.codeplex.com/releases/view/44680

目前最新的0.9.5的源文件下载地址:http://hubbledotnet.codeplex.com/SourceControl/list/changesets

安装步骤:

(一)下载HubbleDotNet0.8.3

(二)安装HubbleDotNet0.8.3

获取Key的注册地址为:http://www.hubbledotnet.com/key.aspx

获取Key只要输入一个电子邮箱和姓名,Key就会即时发送到您的邮箱——作者只为统计使用人数而已。邮箱推荐使用google的或qq的,收信速度很快,163邮箱的我等了好久都没收到:(

然后是常规的选择安装目录一路Next就可以了。

(三)安装完成后可以先打开Hubble.net的控制台看一下,控制台界面非常简洁。

(先弹出Connect to Server对话框输入127.0.0.1即可)

是不是有点像SqlServer数据库的管理器啊,呵呵,左边区域显示的就是Hubble的“数据库”,你以后就在那里进行添加管理HubbleDotnet“数据库”的(嗯,其实就是索引库了,类似Lucene.net的索引文件,Hubble的将索引文件以库-表的结构形象的在控制台展示出来方便操作;右上Execute区域是SQL命令输入区,右下Results为搜索结果显示区。

(四)升级HubbleDotNet到最新版本

1.下载HubbleDotNet最新项目源代码程序回来自己编译得到编译组件。

2.停止本机上Hubble.net服务(hubble装上后就在本机上注册一个系统服务了,服务名就叫Hubble.net)

3.覆盖最新版的编译组件到0.8.3.0的安装目录的Default子目录下

4.重新启动本机Hubble.net服务
下面是各个步骤的图解:

打开http://hubbledotnet.codeplex.com/SourceControl/list/changesets去下载最新的Source Code

解压缩后进入HubbleDotNet-xxxx/C#/src/目录下使用vs2008打开解决方案Hubble.Net.sln

使用vs2008打开后将解决方案的编译模式从Debug模式改为Release模式,生成解决方案后,会在HubbleDotNet-xxxx/C#/Bin/目录得到最新组件的编译结果,全部拷贝到刚才0.8.3.0的安装目录的Default子目录下覆盖即可(先停止系统的Hubble.net服务)

升级后别忘了重新开启系统Hubble.net服务。打开HubbleDotNet控制台,点击菜单Help—》About查看最新的版本Hubble版本号检查升级是否成功。

三、HubbleNet的使用

(一)在控制台中操作

1.创建Hubble数据库(索引库)

现在我机上装的是SqlServer2008,里面事先已有一存储大量新闻的数据库News(如下图),现在我要新建一个Hubble索引库与这个News数据库绑定以便全文搜索

下面开始了:

打开HubbleDotNet控制台程序,右键点击根节点,选择CreateDatabase(新建数据库)菜单


弹出新建索引库对话窗口


Database Name(索引库名称):填写您要新建的Hubble库的名称(可以和SqlServer系统中数据库名相同也可以不同)如:HubbleNews

Default Index Folder(索引存储目录路径):在这里填写新建的Hubble索引库的存放位置,如d:TestHubbleNews

Default DB Apapter(数据库适配器):在这里选择你机器上的数据库系统类型,有SQLSERVER2000、SQLSERVER2005、Oracle8i三种可选,看你机上装的是哪种数据库系统选择不同的适配器。(注:SQLSERVER2005适配器适用于微软SqlServer2005及其以后的数据库系统) 

Default DB Connection String(数据库连接字符串):连接到你机上数据库系统的数据库连接字符串,如:Data Source=(local);Initial Catalog=News;User ID=xxx;Password=xxx

点击Test DB Connection String(测试数据库连接)按钮看看Hubble系统能否正确连接到数据库系统,弹出Connection Successful!信息表示连接成功,否则出现错误信息。

最后点击Create按钮就创建Hubble库了,Refresh刷新一下就能看到,这样这个新建的Hubble索引库HubbleNews与数据库News就算是绑定了。(这里要注意Hubble索引库有时候大家也称作“数据库”,不要和真正的SqlServer数据库概念搞混了)。

好了,刚才建立的Hubble索引库内还没有任何内容,接下来就要对该索引库里面添加Hubble的“表”,这个“Hubble表”与数据库的表又是什么关系的,看图边说。

在新建的HubbleNews这个索引库上右键菜单中选择Create Table项


弹出Create Table对话框

 

Table Name(表名):填写将要新建的Hubble表的名称,因我要和数据库News里的dob.News表绑定,如:hubbleNewsTable

Index Folder(索引文件存储位置):表的存储目录

DB Adapter(数据库适配器)和DB Connection String(数据库连接字符串)就不再赘述了! 

最后点击Next按钮即可进入一下对话界面:

接下来在设置IndexMode和IncrementalMode等信息

(1)IndexMode(索引模式)下有两个选择:

Build Index in new table:在这种模式下,新建一张hubble表,你再到SqlServer中看下,数据库中会自动添加一张表,删除这个索引表,数据库中的对应表也自动没有了,这是为什么?这种模式也叫IndexOnly=true模式,数据库是被Hubble主动控制的,我们只要操作Hubble,Hubble自动去操作对应的数据库。(这模式我一般用的少)

Build Index from exist tale:顾名思义,是根据数据库中一张已存在的数据库表来建立索引。这个模式也叫IndexOnly=false模式。若选择此模式,下面会出现Exist Table Name or View Name输入框,要你填写已存在的要将索引的数据库中表名或视图名。此模式符合我当前的要求,因为我就是要为数据库News中的News这张表建立索引的,故我填上数据库中表名News。

(2)IncrementalMode这里主要是选仅是增加索引还是需要增改删的全部功能,这里一般都选择下面的Append,Delete,Update,除非你的记录只增不该,那你就选第一个Append Only。

然后点击Next到下一步

在这里设置索引表的字段和存储类型

默认情况下是它是将该数据库表的所有字段都列出来,当然如果您的数据库表有的字段不参与查询和查询那完全可以移去(选中该字段前面的Checkbox,然后点击Delete按钮即可移去一个字段),这里主要要介绍一下字段的IndexType类型,分三种:

(1)Tokenized即分词索引模式,选择Tokenized后,需要指定后面的分词器Analyzer类型(有英文分词,中文分词,盘古分词)

(2)UnTokenized即不分词但索引的模式:比如日期、数字之类的不需要分词但需要建索引

(3)None表示不分词也不索引,这适合一些字段仅需要对字段值进行存储以便数据查询时提供显示。

别忘记填写ID Fileld:指定哪个字段为自动编号字段(需要在数据库中指定该字段值是自增的)。

点击Next下一步后最后出现Rebuild Table对话框创建索引

点击Rebuild按钮即可对当前索引表内的数据重建索引数据了。

RebuildWholeTable意思是是否对整张表重新建立索引

DocId from意思是从索引编号多少开始建立索引

2.建立Hubble库后进行搜索查询

在控制台中输入SQL语句进行搜索查询,非常方便

查询语法示例:

select * from HubbleNewsTable

select top 10 * from HubbleNewsTable

select * from HubbleNewsTable where Title match '北京天安门'    (模糊搜索标题title)

select * from HubbleNewsTable where Title contains '北京天安门'    (精确搜索标题title)

select  * from HubbleNewsTable where Title contains '北京天安门' and NewsContent match '北京天安门'    (精确搜索标题title同时模糊搜索内容NewsContent)
其他的自己看demo了,当然FSQL和标准的SQL也并不是完全100%一致的,比如这样不行select * from [HubbleNewsTable]

(二)在程序中使用HubbleDotNet

这里大家主要可以参考从HubbleDotNet源码中的Demo了,我贴几段代码大家看了就会明白。

using PanGu;
using Hubble.Framework;
using Hubble.Core;
using Hubble.Analyzer;
using Hubble.SQLClient;


//....添加一个记录到Hubble表中

public static bool InsertIndex(SCH.Model.News News)
        {
            string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"];
            string hubbleSql = "insert hubbleNewsTable ([ID],[title],[newscontent])  values (@ID,@title,@newscontent)";
            int flag=0;
            using (HubbleConnection conn = new HubbleConnection(ConnectionString))
            {
                conn.Open();
                HubbleCommand matchCmd = new HubbleCommand(hubbleSql, conn);
                matchCmd.Parameters.Add("@ID", News.Id);
                matchCmd.Parameters.Add("@title", News.title);
                matchCmd.Parameters.Add("@newscontent", News.newscontent);
                flag = matchCmd.ExecuteNonQuery();
            }
            return (flag > 0) ? true : false;
        }


同理删除用delete语句,修改用Update语句差不多的。

需要提一下:

如果是IndexOnly=false模式下

添加数据:先添加记录到数据库,在添加记录到Hubble索引库。

删除数据:先删除Hubble索引库中记录,在删除数据库中记录。

更新记录:顺序无所谓。

也就是在IndexOnly=false模式下,你要通过程序对两边都要操作。

四、HubbleDotNet的常见问题及解决方法

常见的问题和解决方法可以估计要放到另外一篇文章中继续了,先提供大家eaglet的博客园的小组地址:http://home.cnblogs.com/group/search/
去那里可以找到人家已经问过的许多问题和eaglet本人的解答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值