系统简介

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

相关资源

Hubble.net 的相关资源

HubbleDotNet 项目首页

Codeplex上项目首页

中文讨论群组

HubbleDotNet的安装及demo视频演示

中文使用手册

0.9 版本功能列表

1. 索引

2. 查询

3. 删除

4. 更新

5. 基于 SQL 的SQLClient 接口

6. 索引级别缓存

7. 查询级别缓存

8. 数据级别缓存

9. 多字段排序

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

11. 关键字权重指定

12. 字段权重指定

13. 记录权重指定

14. 索引自动优化

15. 索引手工优化

16. 自定义分词器

17. 自定义数据库适配器

18. 系统存储过程

19. 查询分析器

20. 建表,删表

21. 基于数据库现有表或视图创建索引

22. 和数据库现有表或视图索引同步

23. 分组统计

24. Match, Contains, Like 三种查询方式

25. 拆离和附加 (备份和恢复)索引

物理视图

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

逻辑视图

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

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

三级缓存

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

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

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

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

并发控制

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

内存管理

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

HubbleDotNet 与 Lucene.net 的功能对比

功能

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

HubbleDotNet引擎查询技术的更多相关文章

  1. 海胜专访--MaxCompute 与大数据查询引擎的技术和故事

    摘要:在2019大数据技术公开课第一季<技术人生专访>中,阿里巴巴云计算平台高级技术专家苑海胜为大家分享了<MaxCompute 与大数据查询引擎的技术和故事>,主要介绍了Ma ...

  2. 万亿级日志与行为数据存储查询技术剖析(续)——Tindex是改造的lucene和druid

    五.Tindex 数果智能根据开源的方案自研了一套数据存储的解决方案,该方案的索引层通过改造Lucene实现,数据查询和索引写入框架通过扩展Druid实现.既保证了数据的实时性和指标自由定义的问题,又 ...

  3. 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

    转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq& ...

  4. 让AI简单且强大:深度学习引擎OneFlow技术实践

    本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...

  5. Hibernate 查询技术

    转载: http://blog.csdn.net/u014078192/article/details/24986475 一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查 ...

  6. es的scoll滚动查询技术

    如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以 ...

  7. SQL注入原理-手工联合注入查询技术

    实验报告记录 得到实验结果

  8. 《parsing techniques》中文翻译和正则引擎解析技术入门

    http://parsing-techniques.duguying.net/ (中文版) https://swtch.com/~rsc/regexp/ https://blog.csdn.net/m ...

  9. 微博大数据即席查询(OLAP)引擎实践

    前言 适用于 即席查询 场景的开源查询引擎有很多,如:Elasticsearch.Druid.Presto.ClickHouse等:每种系统各有利弊,有的擅长检索,有的擅长统计:实践证明,All In ...

随机推荐

  1. Linux 下eval命令揭秘

    eval 命令中文意思是“重新计算求出参数内容”,该命令大致有以下几个作用 将变量名替换后并执行 beautifulsoup4- Desktop Documents hc.war lxml- mybl ...

  2. BNUOJ 1575 Supermarket

    Supermarket Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID ...

  3. [luoguP2461] [SDOI2008]递归数列(DP + 矩阵优化)

    传送门 本题主要是构造矩阵,我们只需要把那一段式子看成两个前缀和相减, 然后就直接矩阵连乘. 直接对那个k+1阶矩阵快速幂即可,注意初始化矩阵为单位矩阵,即主对角线(左上到右下)都为1其他都为0. 另 ...

  4. idea-自定义Java模板文件

    自定义 idea Java 模板步骤. #parse("File Header.java")表示引用的模板文件,如下:

  5. 牛客网暑期ACM多校训练营(第三场)J 多边形与圆相交的面积

    链接:https://www.nowcoder.com/acm/contest/141/J 题目描述 Eddy has graduated from college. Currently, he is ...

  6. 如何使用shell收集linux系统状态,并把结果发给远端服务器

    第一步:收集系统当天状态 load状态 内存状态 cpu状态 jvm相关信息:jstat jstack 网络信息 硬盘信息 第二步:发送到远端服务器 使用curl.wget.定义接口. https:/ ...

  7. C/C++实现bmp文件读写

    之前知道点bmp图的格式,然后对8位操作过,然后今天弄了一下24位真彩色的. C++读取.旋转和保存bmp图像文件编程实现 主要是理解bmp文件的格式8/24位的区别 8位图有调色板,24位在文件头和 ...

  8. hdu 4057 Rescue the Rabbit

    题意 给出n(n<=10)个串,每个串有个权值,然后让你构造一个长度为l(l<=100)的串,如果他包含给出的串就得到相应的权值,求可能得到的最大权值 解法 AC自动机+DP,很显然要建立 ...

  9. CSS浮动通俗讲解

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...

  10. Linux 修改终端命令提示符颜色

    相信很多人已经看厌了Linux已成不变的命令提示符的颜色,多数人要么使用默认的绿色,要么在使用PUTTY的时候设置成绿色的,不知道是否有人想到提示符可以设置成其他的颜色呢,本文就说明命令提示符变量PS ...