【转载】HubbleDotNet开源全文搜索数据库项目

HubbleDotNet开源全文搜索数据库项目--查询方法汇总

 

 

 

HubbleDotNet 是一个开源项目,开源项目的特点就是反应迅速,功能推出会很快,版本会经常需要升级。本文将介绍如何进行版本升级。

在开始本文之前,先来看看 HubbleDotNet 包含的组件都有哪些。

组件简介

HubbleService.exe

这个程序是hubble.net 的windows 服务进程,这个经常只负责在服务启动时启动 hubbletask ,并在服务关闭时关闭 hubbletask。

HubbleTask.exe

这个程序是 hubble.net 的宿主进程,不运行 hubbleService ,直接运行这个程序,也可以运行hubble.net。这个程序启动后将侦听 TCP 端口,接受从 sqlclient 发来的查询请求,执行并返回结果给 sqlclient。

Hubble.Core.dll

这个是Hubble.net 的核心算法库,所有的搜索和索引算法都由这个库提供

Hubble.Framework.dll

这是 hubble.net 的平台库,提供一些公用的类和方法。

Hubble.Analyzer.dll

这个库定义了分词器的接口,并提供几个默认的分词器。

Hubble.SQLClient.dll

这个库是 hubble.net 的SQL 访问客户端,其作用和System.Data.Sqlclient 类似。这个库可以由应用软件调用。

QueryAnalyzer.exe

这个程序是Hubble.net 提供的查询分析器,它主要负责提供图形化的管理和查询功能。

 

升级步骤

第一步:编译代码

代码位置http://hubbledotnet.codeplex.com/ 这个主页的 Source Code Tab 中。下载最新的代码,打开 Hubble.Net.sln 这个解决方案,编译。

编译环境为 VS 2008

编译后将生成上述组件。

注意:为了保证执行效率,建议直接编译 release 版本,如果编译debug 版本,将会出现如下错误:

错误 3 不安全代码只会在使用 /unsafe 编译的情况下出现

这是我故意这样搞的,Debug 版本我没有将项目的 unsafe 选项选中。如果你一定要编译Debug 版本,请在项目属性中将unsafe 选项选中。

 

第二步:停止服务

在服务管理中停止 Hubble.net 服务。

 

第三步:覆盖组件

用除 HubbleService.exe  外的所有编译好的组件覆盖位于 Program Files/Hubble.net/Default 这个目录下的原组件。

如果应用程序,比如 Asp.net 的 Web site 调用了 Hubble.SqlClient.dll ,需要同时更新相应目录下的 Hubble.SqlClient.dll ,Hubble.Analyzer.dll,Hubble.Framework.dll

 

第四步:启动服务

在服务管理中启动 Hubble.net 服务。

 

第五步:检查

进入 QueryAnalyzer,在菜单中选 About,将显示目前客户端组件,服务器的版本号。

 

image

 

返回 Hubble.net 技术详解

 

 

 

 

 

使用Hubble.Net实现全文检索

一、 下载安装
到Hubble.net 项目首页 http://hubbledotnet.codeplex.com/的 download tab 里面下载安装文件
根据你的操作系统下载不同的安装包,我的系统是32位的windows 7系统,所以我下载
最好是下载最新版的,因为新版是对旧版的改进和修复。
Hubble。Net是个开源的项目,所以,你可以把他们的源码下载下来学习下
还可以下载一些文档学习下,如果安装和Hubble.Net使用手册,还有Demo
安装的时候,可以查看安装文档<<Hubble.Net安装指南.pdf>>
二、 配置Hubble.Net 货运专家
安装完可以在系统应用程序中看到Query Analyzer应用程序,Hubble.Net和关系数据库之间的关系,主要是通过这个工具配置的。这个查询分析器的使用方法,可以查阅文档<<查询分析器使用指南.pdf>>
三、 需要明确几点
1、 Hubble.Net不存在实体数据库,只是在硬盘某一目录下建一个文件夹,来存放索引文件,这个索引就类似于字典的检索目录
2、 关系数据库和 Hubble.Net数据库要分开建,先在SQL Server Managerment Studio中建好关系数据库,然后在Query Analyzer中建数据库并建立和关系数据库的关系;Query Analyzer可以同时操作Hubble.Net数据库和关系数据库的表操作
四、 项目中的应用
(1)、配置webconfig文件
<connectionStrings>
<add name="HubbleNetConnection" connectionString="Data Source=127.0.0.1; uid=sa;pwd=123456;Initial Catalog=News;" providerName="Hubble.SQLClient"/> 女装品牌大全
</connectionStrings>
(2)、在Web项目中的bin中放入相应动态链接库
(3)、连接Hubble.Net获取DataSet

ConnectionStringSettings connString = WebConfigurationManager.ConnectionStrings["HubbleNetConnection"];
using (HubbleConnection conn = new HubbleConnection(connString.ConnectionString))
        {
            conn.Open();

            GetColumnAnalyzerName(conn, "News");
            HubbleCommand matchCmd = new HubbleCommand(conn);

            string wordssplitbyspace;
            string titleMatchString = matchCmd.GetKeywordAnalyzerStringFromServer("News", "Title", keywords, int.MaxValue, out wordssplitbyspace);
            string contentMatchString = matchCmd.GetKeywordAnalyzerStringFromServer("News", "Content", keywords, int.MaxValue, out wordssplitbyspace);

            //查单表
            HubbleCommand cmd = new HubbleCommand("select between {0} to {1} * from News where content match {2} or title^2 match {3} order by score desc, time desc",
                conn, (pageNo - 1) * pageLength, pageNo * pageLength - 1, contentMatchString, titleMatchString);

            //查多表(有几个需要注意的地方:1、sql前面要加[UnionSelect];2、查找的字段需写明确,不能用*;3、每个SQL返回的字段必须相同,返回的记录数也要相同;4、多条SQL之间用分号分开)
            //HubbleCommand cmd = new HubbleCommand("[UnionSelect] select between {0} to {1} title,content,url,time from News where content match {2} or title^2 match {3} order by score desc, time desc;select between {0} to {1} title,content,url,time from Activity where content match {2} or title^2 match {3} order by score desc, time desc",
            //    conn, (pageNo - 1) * pageLength, pageNo * pageLength - 1, contentMatchString, titleMatchString);

            newsDataSet = cmd.Query(CacheTimeout);
        }

 

 

------------------------------------------------------

 

 

1、准备工作下载相应文件

Hubble.net安装程序

相应源码 这个源码里有eaglet做的demo

相应帮助的视频文件第一集)(第二集)(第三集)(第四集

2、部署运行环境

1)、安装Hubble.net程序

解压Hubble.net压缩包,并双击安装setup.exe文件。

安装成功后在window服务列表里就存在以下服务

clip_image002

在任务管理器存在以下两个进程

clip_image004

clip_image006

2)、建立Hubble.net数据库和表

打开服务器电脑D盘并建立文件夹Test\News这个文件夹用来保存全文搜索文件

打开开始à程序àHubble.netà QueryAnalyzer程序

如图所示

clip_image008

运行建立数据库的T-SFQL脚本

exec sp_adddatabase 'News', 'd:\test\news\', 'SQLSERVER2005', 'Data Source=(local);Initial Catalog=News;Integrated Security=True';

--News,表示建立的Hubble.net的数据库,d:\test\news\保存全文索引的文件路径,SqlServer2005服务器sql的版本,最后一个参数表示链接字符串。

建立需要全文搜索的表

exec sp_droptable 'news';

--若news表存在则删除

Create table News

(

Title nvarchar(max) Tokenized Analyzer 'PanGuSegment' NOT NULL Default '',

Content nvarchar(max) Tokenized Analyzer 'PanGuSegment' NOT NULL Default '',

Time Date Untokenized NOT NULL Default '1990-01-01',

Url nvarchar(max) NULL

);

--使用盘古分词对字段title,content进行全文搜索,并同时建立字段time和链接地址url

打开SQL Server Management Studio就可以看见建立的news数据库如图所示

导入需要全文搜索的数据(或者在程序中插入新闻时向hubble.net插入记录)

3、在项目中应用

(1)、配置webconfig文件

<connectionStrings>

<add name="News" connectionString="Data Source=192.168.0.109; uid=ljj;pwd=123456;Initial Catalog=News;" providerName="Hubble.SQLClient"/>

</connectionStrings>

(2)、在Web项目中的bin中放入相应的动态的链接库文件

clip_image010

(3)、引入FullTextSearch项目,具体代码可根据用户表结构自行修改

clip_image012

(4)、在bin引入FullTextSearch项目

(5)、建立搜索页Search.aspx具体代码请查看测试项目

4、项目预览

clip_image013

5、常见问题解答

1、Q:提示与关系数据库没连接上,我又重启服务,又提拒绝连接?

A:可能是你本机的SQLSERVER 启动比较慢造成。
新版本中我把连接数据库超时时间改为了120秒(默认是15秒),启动时尝试连接5次。这样应该会稳定很多。

2、Q:我现在已经有个hubblenet数据库,若局域网内任何人只要装上hubblenet软件都可以连接这个数据库,并进行操作,这样会出现误操作?

A:在防火墙上设置只有你本机或者你指定的机器可以访问 7523端口就可以了。

3、Q:我现在有表news,和product,表结构差不多,现在t-sfql不支持多个表联合查询,不知道这个问题该怎么解决?

A:如果两个表的表结构相同 0.8 版本将提供多实例方案可以进行整合。真正的多表关联要到更后的版本实现。

4、Q:这个项目是开源的吗?开源的网址是什么?

A:是开源的,http://hubbledotnet.codeplex.com

5、Q:这个软件查询用的不是T-Sql语句,而是T-Sfql,这个与传统的T-sql有什么不同?

A:T-SFQL (Transact-Structured Full-text Query Language) 是在T-SQL 标准基础上衍生出来的结构化全文查询语言。2009年由Hubble.net 提出,语言全文数据库的查询和管理。

T-SFQL 0.1 版本为T-SFQL 语言推出的第一个版本。该版本只提供基本的“增删改查”功能。其他功能将逐渐在后续版本中提供。详细请查看

http://www.cnblogs.com/eaglet/archive/2009/04/27/1444778.html

6、Q:这个软件是收费的吗?为什么提示让我输入我的邮箱和序列号?

A:注册的目的不是为了收费,而是为了统计一下使用的人数。

您可以到下面链接注册

http://www.hubbledotnet.com/key.aspx

填写完所有信息后,点击Submit 按钮,您的installation key  将被发送到您输入的email 地址。如果你没有收到,请检查一下是不是在垃圾邮件里面。如果垃圾邮件中也没有,可以再注册一次,网站会重新发送一遍给你。

如果您访问这个页面有困难,您可以发送如下信息到 Hubble.net@gmail.com 我们将帮您注册。

您用于注册的 Email 地址

您所在国家

您的姓名,可以用网名。

我们推荐您使用第一种方法注册,除非您访问那个网站确实有困难。

7、Q:如何查看我我的hubble版本,如何在hubble查看分词结果?

A:exec sp_testanalyzer 'PanguSegment', '李晶晶'

clip_image015

exec SP_Version

clip_image017

更具体的帮助请查看http://www.cnblogs.com/eaglet/tag/Hubble/博客,这儿只是列出我在实施过程中的过程,和遇到的问题解答

 

posted @ 2011-12-26 13:52  火腿骑士  阅读(281)  评论(0编辑  收藏  举报