开源搜索引擎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:\Test\
HubbleNews
Default
DB Apapter(数据库适配器):在这里选择你机器上的数据库系统类型,有SQLSERVER2000、
SQLSERVER2005、Oracle8i三种可选,看你机上装的是哪种数据库系统
选择不同的适配器。
(注:SQLSERVER2005适配器
适用于微软SqlServer2005及其以后的数据库系统)
Default
DB Connection String(数据库连接字符串):连接到你机上数据库系统的数据库连接字符串,如:
Data Source=(local);Initial Catalog=
Ne
ws
;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到下一步
在这里设置Hubble索引表中的字段和分词及存储类型
默认情况下是它是将该数据库表的所有字段都列出来,当然如果您的数据库表有些字段不参与查
询和搜索那完全可以移去(选中该字段前面的Checkbox,然后点击Delete按钮即可移去一个字段),这里主要要介绍一下字段的字段的
IndexType索引类型,分三种:
(1)Tokenized即分词索引模式,选择Tokenized后,需要指定后面的分
词器Analyzer类型(有英文分词,中文分词,盘古分词)
(2)UnTokenized即不分词但索引的模式:比如日期、数字之类的不需要分词但
需要索引
(3)None表示不分词也不索引,这适合一些字段仅需要对字段值进行存储以便数据查询
时提供显示。
别忘记填写ID
Fileld:指定哪个字段为自动编号字段(需要在数据库中指定该字段值是自增的)。
点击Next下一步后最后出现Rebuild Table对话框创建索引
点击
Rebuild按钮即可对当前索引表内的数据重建索引数据了。
RebuildWholeTable
意思是是否对整张表内的所有记录重新建立索引
DocId
from意思是从索引编号多少开始建立索引
2.
建立Hubble库后进行搜索查询
在控制台
中输入SQL语句点击Execute按钮进行搜索查询,非常方便
查询语句
示例:
select
* from HubbleNewsTable
select
top 10 * from HubbleNewsTable
select
* from HubbleNewsTable where Title match 'XX门
事件
' (模糊搜索标题title)
select * from HubbleNewsTable where
Title contains 'XX门
事件
' (精确搜索标题title)
select * from HubbleNewsTable where
Title contains 'XX门事件' and NewsContent match 'xx门
事件
'
(精确搜索标题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语句差不多的。
搜索查询使用select语句返回数据集可以看看
源码中的demo。
需要提一下:
如果是IndexOnly=false模式下
添加数据:先添加记录到数据库,再添加记录到Hubble索引库。
删除数据:先删除Hubble索引库中记录,再删除数据库中记录。
更新记录:顺序无所谓。
也就是在IndexOnly=false模式下,你要通过程序对两边(数据库和
Hubble索引库)都要操作以维持记录同步。
四、HubbleDotNet的常见问题及解
决方法
常见的问
题和解决方法可以估计要放到另外一篇文章中继续了,先提供大家eaglet的博客园的小组地址:
http://home.cnblogs.com/group/search/
去那里可以找到人家已经问过的许多问题和eaglet本人的解答。
分享到:
相关推荐
Java开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava...
开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx开源的搜索引擎工具包和web搜索引擎系统 - austin lius ...
(C#开源搜索引擎).rar (C#开源搜索引擎).rar (C#开源搜索引擎).rar
开源搜索引擎的比较,Lucene Nutch Heritrix Weblech等
一个不错的c# 开源搜索引擎完整的例子,含有全部源代码。
建立索引,检索,分词,分类,开源搜索引擎,solr
其中内容均为前段时间研究开源搜索引擎时搜集参考的资料,非常齐全包含的内容有: Computing PageRank Using Hadoop.ppt Google的秘密PageRank彻底解说中文版.doc JAVA_Lucene_in_Action教程完整版.doc Java开源搜索...
PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip
一个开源的搜索引擎程序C#编写的。里面有详细的说明文档,功能详尽,而且推荐个下载开源源码的网站,相信对学习C#和.NET的朋友有很大帮助
一个C#开源搜索引擎源码程序,有兴趣的朋友可以研究一下,大家一起分享交流一下!
教你如何利用网上现有的开源工具搭建一个小型的搜索引擎,完成简单的搜索引擎功能,获取感兴趣的信息!
开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.pdf开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.pdf开源的搜索引擎工具包和web搜索引擎系统 - austin lius ...
把程序上传到空间上即可运行(★★如果在子目录...之前使用1.X版本的站长需要全部重新覆盖本程序采用utf-8国际编码编写,请勿使用记事本修改代码,否则会出错。请用支持utf-8编码的编辑器修改,如notepad++、dreamweaver
开源搜索引擎,全文检索推荐对比,提高查询速度
YISO智云搜索引擎采用PHP语言编写的开源搜索引擎源代码.rarYISO智云搜索引擎采用PHP语言编写的开源搜索引擎源代码.rarYISO智云搜索引擎采用PHP语言编写的开源搜索引擎源代码.rar
云寻觅搜索引擎分词
Apache Solr 是一个流行的开源搜索服务器,它通过使用类似 REST 的 HTTP API,这就确保你能从几乎任何编程语言来使用 solr。 Solr 是一个开源搜索平台,用于构建搜索应用程序。 它建立在 Lucene(全文搜索引擎)
Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 nutch 1.0
迅速搭建全文搜索平台——开源搜索引擎实战教程--代码