系统简介

  Hubble.net 是一个基于.net framework 的开源免费的全文搜索数据库组件。开源协议是 Apache 2.0。Hubble.net 提供了基于SQL的全文检索接口,使用者只需会操作SQL,就可以很快学会使用Hubble.net进行全文检索。Hubble.net 可以实现全文索引和查询、多域检索和排序、分组统计、消重、分类、聚类、多表关联查询等等一系列全文检索和数据挖掘功能。Hubble.net 提供开放的数据库适配器接口,可以和各种数据库完美整合,为各种数据库系统附加全文检索和数据挖掘功能。Hubble.net 设计了较为完善的并发控制程序,数据的增删改查可以多线程同时并发进行,没有任何冲突。Hubble.net 还进行了缓存和内存管理设计,可以帮助用户最大限度的提高查询的效率。Hubble.net 力争在未来的几年内超过Lucene.net成为.net开发环境中最受欢迎的全文检索组件。

  0.7版本功能列表

  1. 索引

  2. 查询

  3. 删除

  4. 更新

  5. 基于 SQL 的SQLClient 接口

  6. 索引级别缓存

  7. 查询级别缓存

  8. 数据级别缓存

  9. 多字段排序

  10. 全文和元数据组合查询

  11. 关键字权重指定

  12. 字段权重指定

  13. 记录权重指定

  14. 索引自动优化

  15. 索引手工优化

  16. 自定义分词器

  17. 自定义数据库适配器

  18. 系统存储过程

  19. 查询分析器

  20. 建表,删表

  21. 并发控制

  物理视图

  查看原图(大图)

  Hubble.net 将全文搜索和关系数据库整合到一起,通过SQL语句对数据库中的数据进行全文和关系查询。Hubble.net 组件本身负责对全文数据进行倒排索引,并将索引存储到表所指定的目录下,数据的存储则由和Hubble.net 关联的关系数据库完成。Hubble.net 提供了一个 IDBAdpter 接口,用户可以根据这个接口实现自定义的数据库适配。如何添加自定义的数据库适配器,将在存储过程一节中阐述。建立倒排索引时需要对输入的全文文本进行分词,Hubble.net 为用户提供了一个 IAnalyzer 接口来完成自定义的分词器。如何添加自定义的分词器,将在存储过程一节中阐述。Hubble.net 在安装后以一个系统服务的形式存在。 Hubble.net 提供一个 Hubble.SQLClient 组件来和Hubble.net 的系统服务进行交互,SQLClient 的接口和Ado.net 中的SqlClient接口类型,具体将在SQLClient一节中阐述。

  逻辑视图

  查看原图(大图)

  Hubble.net 和 关系数据库一样,存在数据库和数据库表的概念。Hubble.net 的数据库和数据表只是提供一个和对应关系数据库的映射描述关系,并不存在数据库和数据表的实体。用户在通过SQL 语句操作Hubble.net 的数据库和数据表是,Hubble.net 将自动和对应的关系数据库实体进行关联,从用户侧看,Hubble.net就像一个数据库实体。

  Hubble.net 负责建立文本字段的倒排索引和Untokenized字段的单值索引。关系数据库负责建立B+树索引。如果查询语句不包括对全文字段的搜索,则直接转发给数据库利用数据库的索引进行查询。

  三级缓存

  查看原图(大图)

  如上图所示,Hubble.net 提供三种级别的缓存方案。

  Index cache :索引级别缓存用于缓存倒排索引和单值索引。这种缓存为系统自动管理,不能关闭。索引级别缓存会自动监控数据的增删改,并进行相应修改。

  Query cache :查询级别缓存对查询的条件进行缓存,Hubble.net 系统服务会将不同查询条件对应的文档ID(DocId)缓存下来,下次查询时直接从缓存中获取符合条件的文档ID,不再访问低级别缓存或索引。和索引级别缓存不同的是,当表的数据发生变化时,查询级别缓存将会失效,需要重新缓存。

  Data cache :数据级别缓存运行在客户端,客户端查询得到的数据被缓存下来,下次查询时将从数据缓存中直接获取数据,而不再到Hubble.net 系统服务中去获取数据。和查询级别缓存一样,表的数据发生变化时,数据级别缓存将会失效,需要重新缓存。

  并发控制

  Hubble.net 设计了非常完善的并发控制机制,用户的增删改查可以同时进行,不会存在任何冲突。

  内存管理

  Hubble.net 以系统服务存在,不会像Lucene那样和应用程序共用内存。Hubble.net 设计了一套内存管理机制,用户可以设置最大内存使用数量,一旦Hubble.net 使用内存超过这个数量,Hubble.net 就会自动启动内存整理程序,将一些不经常使用的缓存从内存中清理掉以腾出更多的内存空间给用户。用户可以通过 SP_CONFIGURE 存储过程来查看和管理内存。

  Hubble.net 的相关资源

  Hubble.net 项目首页:https://sourceforge.net/projects/hubbledotnet/

  中文讨论群组:http://space.cnblogs.com/group/search/

  Hubble.net的安装及demo视频演示

  中文使用手册 

  Hubble.net 与 Lucene.net 的功能对比

功能 Lucene.net Hubble.net
按词条搜索—TermQuery 支持 0.7 版本已支持
“与或”搜索—BooleanQuery 支持 0.7 版本已支持
在某一范围内搜索—RangeQuery 支持 0.7 版本已支持
使用前缀搜索—PrefixQuery 支持 0.8 版本提供
多关键字的搜索—PhraseQuery 支持 0.7 版本已支持
相近词语的搜索—FuzzyQuery 支持 通过分词来实现,0.7.1.0 中提供的EnglishAnalyzer 可以完成类似功能
使用通配符搜索—WildcardQuery 支持 0.8 版本提供
更新数据-Update 需要删除后再添加 直接调用 Update 语句完成,如果只更新非全文字段,不重新索引,速度非常快
增量索引 支持 0.7 版本已支持
不同字段指定不同分词器 不支持 0.7 版本已支持
分组统计-Group by 不支持 0.9 版本提供
与关系数据库关联 不支持 0.7 版本可支持单表的关联,后续版本提供多表的关联
并发控制 读、写、优化等不能同时进行 读、写、优化等可以同时进行,0.7版本已支持
内存管理 不支持 可设定最大内存使用阈值,到这个阈值后会自动将不常访问的缓存清理掉,0.7版本已支持
重建索引(数据不动,只重建全文索引) 不支持 0.8 版本提供
多表关联查询 不支持 后续版本开发
消重-Distinct 不支持 后续版本开发
分类,聚类等数据挖掘功能 不支持 后续版本开发

  Hubble.net 与 Lucene.net 的性能对比

  索引速度

  索引速度方面 Hubble.net 要比Lucene 慢一些,我分析了一下,主要原因不是索引的速度慢,而是Hubble.net 需要将数据插入关系数据库,这个开销很大,如果和轻量级的数据库比如(Sqlite) 绑定,相信速度会提高很多,不过目前我还没有开发基于Sqlite 的数据库适配器,所以缺乏这方面的测试报告。

  首次查询时间

  上图显示了数据量从10万行到50万行匹配1万行记录时首次检索单一关键字(包括读取磁盘的时间)的时间曲线。

  平均查询时间

  上图显示了数据量从10万行到50万行匹配1万行记录时检索单一关键字(不包括读取磁盘的时间)的平均时间曲线。

  测试数据为执行100次的平均时间。

  根据元数据字段(Unkotenized 类型索引字段) 排序的查询时间

  上图显示了数据量从10万行到50万行匹配1万行记录时检索单一关键字并根据元数据字段排序(不包括读取磁盘的时间)的平均时间曲线。

  测试用的元数据字段是一个自增长的整数类型字段

  范围查询(RangeQuery) 的查询时间

  上图显示根据一个自增长的整数类型字段进行范围查询时Lucene.net 和 Hubble.net 的性能对比曲线

  横坐标表示查询范围分别是 0-999, 0-1999, 0–2999 以此类推。

Hubble.net 简介及与Lucene.net 对比测试相关推荐

  1. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB级.万亿条数据记录的检索工作,这里向大家分享下Lucene底层原理研究和一些优化经验. 从两个方面介绍: 1. Lucene简介和索 ...

  2. 深度解析 Lucene 轻量级全文索引实现原理

    作者:vivo互联网服务器团队-Qian Yulun 一.Lucene简介 1.1 Lucene是什么? Lucene是Apache基金会jakarta项目组的一个子项目: Lucene是一个开放源码 ...

  3. Lucene.net站内搜索—5、搜索引擎第一版实现

    目录 Lucene.net站内搜索-1.SEO优化 Lucene.net站内搜索-2.Lucene.Net简介和分词 Lucene.net站内搜索-3.最简单搜索引擎代码 Lucene.net站内搜索 ...

  4. Lucene入门与使用(一) [转]

    本文主要面向具体使用,适用于已熟悉java编程的lucene初学者. 1. Lucene的简介 1.1 Lucene 历史 org.apache.lucene包是纯java语言的全文索引检索工具包. ...

  5. 阿翔编程学-Lucene入门与使用

    Lucene入门与使用 本文主要面向具体使用,适用于已熟悉java编程的lucene初学者. 1. Lucene的简介 1.1 Lucene 历史 org.apache.lucene包是纯java语言 ...

  6. Lucene.Net+盘古分词器(详细介绍)(转)

    Lucene.Net+盘古分词器(详细介绍)(转) Lucene.Net+盘古分词器(详细介绍) 本章阅读概要 1.Lucenne.Net简介 2.介绍盘古分词器 3.Lucene.Net实例分析 4 ...

  7. Lucene安装及入门

    http://www.blog.edu.cn/user2/56031/archives/2005/378288.shtml Lucene入门与使用 - - 本文主要面向具体使用,适用于已熟悉java编 ...

  8. 分词相关技术(转载)

    最近在做问答系统,自己在园子里面找了下资料,觉得不错,自己是菜鸟原创不行,废话不多说了,送上资料. 第一个是关于Lucene的分词技术 这里可以下载PDF看,Lucene 原理与代码分析完整版 目录如 ...

  9. HubbleDotNet开源全文搜索数据库项目--技术详解

    HubbleDotNet开源全文搜索数据库项目--技术详解 HubbleDotNet 简介 HubbleDotNet 和 Lucene.net 性能对比测试 HubbleDotNet 和 Lucene ...

最新文章

  1. outlook地址薄导入到FOXMAIL
  2. java 8 排序_一遍记住 8 种排序算法与 Java 代码实现
  3. winfrom axacropdf预览pdf怎么一直显示_PDF合并怎么做?分享多个PDF文件合并的方法...
  4. maven 执行testng.xml文件失败解决问题
  5. 使用Apache Ignite构建C++版本的分布式应用
  6. 【翻译】BCGControlBar Professional Edition for MFC v 29.0重大更新
  7. 理解和使用 JavaScript 中的回调函数
  8. hibernate 框架学习笔记
  9. 【测试理论】如何做好探索性测试(二)—增加维度
  10. 进阶实验5-3.2 新浪微博热门话题 (字符串操作)
  11. 笑话,随便笑不收费.
  12. Python 数据分析微专业课程--项目实战11 中国城市资本流动问题探索
  13. 用户态网络协议栈-OFP-网络框架分享
  14. 后台站点-菜单管理功能(一)
  15. 全景图的种类及opencv实现
  16. Jquery获取一组Radio的选中值
  17. 成人想补充蛋白质,光吃鸡蛋就够了?鸡蛋和蛋白粉哪个好一点?
  18. YzmCMS内容管理系统 简单搭建一个自己的本地网站
  19. 三星Galaxy camera刷机资料
  20. 错误信息:ids for this class must be manually assigned before calling save(): sample.db.Completedsample

热门文章

  1. 长沙理工大学第十二届ACM大赛-重现赛 K - 大家一起来数二叉树吧
  2. SQL Server 2012笔记分享-49:理解数据库快照
  3. JDBC:使用连接池管理连接
  4. 关于端口聚合或端口聚合称呼的误区
  5. 在WEBSERVICE学习中遇到的问题
  6. Linux查看nginx相关信息
  7. Computer Systems A Programmer’s Perspective ----阅读翻译日志
  8. 2017最新整理传智播客JavaEE第49期 基础就业班
  9. winform程序读取和改写配置文件App.config元素的值
  10. 练笔--字符串,向量和数组2