当前位置: 首页 > 编程日记 > 正文

HubbleDotNet 简介 (转)

系统简介

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. 拆离和附加 (备份和恢复)索引

物理视图

clip_image001

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

逻辑视图

clip_image002

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

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

三级缓存

clip_image003

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

返回 Hubble.net 技术详解

相关文章:

JavaScript夯实基础系列(四):原型

在JavaScript中有六种数据类型:number、string、boolean、null、undefined以及对象,ES6加入了一种新的数据类型symbol。其中对象称为引用类型,其他数据类型称为基础类型。在面向对象编程的语言中,对象一般是由类实例化出来的&…

python中意外缩进是什么意思_Python 的缩进是不是反人类的设计?

前些天,我写了《Python为什么使用缩进来划分代码块?》,文中详细梳理了 Python 采用缩进语法的 8 大原因。我极其喜欢这种简洁优雅的风格,所以对它赞美有加。 然而文章发出去后,非常意外,竟收到了大量的反对…

netstat命令

使用netstat -nap可以查看当前发送和接收队列,Send-Q 很高时表示发送队列太长,可能网络阻塞 转载于:https://www.cnblogs.com/wx170119/p/11606909.html

mysql操作数字名称的schema时字符的逃逸问题

一个简单的问题折腾了好大一会儿,mysql不支持直接操作数字名称的schema,在sql操作时必须做字符逃逸,如: char sql_str[1000]; memset(sql_str, 0x0, 1000); sprintf(sql_str, "CREATE TABLE IF NOT EXIST %s.%s(data_id INT(…

使用XMLSpyDocEditPlugIn2.dll,页面加载失败

维护项目中遇到问题,项目用到XMLSpyDocEditPlugIn2.dll的acticex控件,客户换了其他pc后,不能下载安装acticex控件,所以不能使用此功能。解决方法: 1 下载 XMLSpyDocEditPlugIn2.dll, 路径 http://download.…

[bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点。 注释:$1\le n\le 10^5$,$1\le m\le 2*10^5$。 …

Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装。…

append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域

“ 这一节有点难。看不懂没关系。继续往后学,回头再来看。”10.6 函数参数传递的机制10.6.1 值传递与引用传递编程语言的参数传递机制通常有两种:值传递拷贝参数的值,然后传递给函数里的新变量。这样,原变量和新变量之间互相独立&…

PowerDesigner生成数据库

此文中图片不小心被删除了,特重写了PowerDesigner生成数据库修改 一、 用POWERDESIGNER生成数据库 FILE-》NEW 在MODEL NAME中输入模版名 在DBMS中选择要连接的数据库类型 点击确定 确定后出现如下页面 选中工具条面版上的 表按钮 在…

随想_8_Windows_XP_Explorer_错误

最近发现微软的系统的稳定性,还是有待提高啊,这不XP SP3的资源管理器,就犯毛病了,俗话说有图 有真相,各位请看: 大家看,资源管理器左边的导航栏, 就可以发现,里面很多东西…

webpack笔记(6)调试模式

在配置devtool时,webpack给我们提供了四种选项。 source-map:在一个单独文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包速度;cheap-module-source-map:在一个单独的文件中产生一个不带列映射的map,不带…

nicstat命令安装与分析

nicstat安装包下载与安装: wget https://downloads.sourceforge.net/project/nicstat/nicstat-1.95.tar.gz tar -zxvf nicstat-1.95.tar.gz cd nicstat-1.95 cp Makefile.Linux Makefile vi Makefile 后修改 CFLAGS $(COPT) make && make install //…

component是什么接口_【Android每日一题】从Activity创建到View呈现中间发生了什么?...

前言前段时间公司招人,作为面试官,我经常让面试者简述View的绘制流程。他们基本都能讲明白View的测量(measure)、布局(layout)、绘制(draw)等过程。还有少数人会提到DecorView和ViewRootImp的作用。但是,当我继续追问关于Window的内容时&…

wp 删除独立存储空间文件(多级非空文件夹删除)

void DelFile(string unZipFilePath)//unZipFilePath第一次传递的是根目录名 { using (var store IsolatedStorageFile.GetUserStoreForApplication()) { if (store.DirectoryExists(unZipFilePath)) { …

重拾博客小序与杂思

寒假期间,条件所限,不能上网,也不能更新博客。寒假结束,懈怠了两个星期,打算重拾博客,继续更新。这学期(2012年2月到2012年8月)在专业学习上将突出几个集中研究的领域,在…

Ubuntu iso镜像文件写入U盘

Ubuntu iso镜像文件写入U盘 Ubuntu iso镜像文件写入U盘方法 分步指南 命令行输入 usb-creator-gtk如下:3、Device 选择插入的U盘 4、image 选择镜像文件 5、make startup disk

页面布局让footer居页面底部_网站各页面该如何布局关键词优化提升排名?

在网站优化中,最值得关注的一个事情就是关键词的布局,因为关键词的布局直接影响着网站的排名。那么怎样布局关键词才能提高页面和关键词的相关性,并提高网站排名呢?下面一起来看看。一、利用HTML标签布局关键词众所周知&#xff0…

Linux中如何配置IP

与网络相关的文件:1) /etc/sysconfig/network 设置主机名称及能否启动Network2) /etc/sysconfig/network-scripts/ifcfg-eth0设置网卡参数的文件3) /etc/modprobe.conf 开机时用来设置加载内核模块的文件4) /etc/resolv.conf 设置DNS IP(解析服务器&…

《DSP using MATLAB》Problem 5.7

代码&#xff1a; %% %% Output Info about this m-file fprintf(\n***********************************************************\n); fprintf( <DSP using MATLAB> Problem 5.7 \n\n);banner(); %% % -------------------------------------------…

一般将来时语法课教案_「英语语法」一般过去时用法技巧全解

大家好&#xff0c;我是教课蚪英语的张老师&#xff0c;今天我们来学习英语语法100讲的第一课&#xff0c;一般过去时&#xff01;一、首先我们了解一下什么是一般过去时&#xff1f;英语语法1. 概念&#xff1a;描述过去的状态或过去的动作。 在英语中&#xff0c;非现在的以前…

修改Ubuntu的启动logo

修改Ubuntu的启动logo 原文链接: https://my.oschina.net/jmjoy/blog/380262 内容: Plymouth splash screen is the initial splash screen at boot-up.Ubuntu 10.04 uses Plymouth instead of xsplash to manage the fancy boot graphics.If you want something different,y…

每周四十小时,你有多少是在为自己干活?

努力工作为什么&#xff1f;普通人不外乎希望加薪、升职&#xff0c;过的更好。 但是&#xff0c;要想达到这个目标&#xff0c;靠什么&#xff1f; 普通人当然要靠提升自己的能力和经验。 可是&#xff0c;你是不是已经发现&#xff0c;工作最踏实的&#xff0c;却未必取得最好…

在Linux下查看共享文件夹

一般情况&#xff0c;我们用到smbclient&#xff0c;常用方法所如下&#xff1a;#smbclient -L //IP地址或计算机名smbclient是samba的Linux客户端&#xff0c;在Linux机器上用来查看服务器上的共享资源&#xff0c;也可以向ftp一样&#xff0c;用户可以等里samba服务器&#x…

算法复杂度的定义

算法复杂度分为时间复杂度和空间复杂度。其作用&#xff1a; 时间复杂度是指执行算法所需要的计算工作量&#xff1b;而空间复杂度是指执行这个算法所需要的内存空间。&#xff08;算法的复杂性体现在运行该算法时的计算机所需资源的多少上&#xff0c;计算机资源最重要的是时间…

C#操作OFFICE一(EXCEL)

C#操作Excel! publicclassImportExportToExcel { private string strConn ; private System.Windows.Forms.OpenFileDialog openFileDlgnew System.Windows.Forms.OpenFileDialog(); private System.Windows.Forms.SaveFileDialog saveFileDlg…

c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

目录1.图的基本定义2.双边匹配问题2.1 二分图基本概念2.2 二分图最大匹配求解2.3 二分图最优匹配求解2.4 二分图最优匹配建模实例2.4.1 二分图最优匹配在师生匹配中的应用2.4.2 二分图最优匹配在多对多拼车算法中的应用3.网络最大流3.1 网络流基本定义3.2 最大流的问题线性规划…

linux 查看库的安装信息

ldconfig -p | grep 库名(例如&#xff1a;lib***&#xff09; 比如&#xff1a; ldconfig -p | grep libcrypto

Asp.net无刷新调用后台实体类数据并以Json格式返回

新建一般处理程序public class Temp {public int Index { get; set; }public string Description { get; set; }public string ImagePath { get; set; }public DateTime MyDate { get; set; } }//数据源 List<Temp> listTemp new List<Temp>(){new Temp(){ Index1…

HDU 排名(简单题)

好久没在oj上做题了&#xff0c;刚开始第二天做一道简单题的心得记录。 1 #include <cstdio>2 #include <cstring>3 #include <string>4 #include <iostream>5 #include <algorithm>6 using namespace std;7 8 /*9 超级无语的错误&#xff0c;#d…

linux系统操作常见问题(ubuntu和opensuse)

在玩linux的过程中&#xff0c;会遇到各种看似奇怪的问题&#xff0c;这些问题往往让那些刚刚接触linux没多久的人不知所措&#xff0c;心中烦躁&#xff0c;这里把我曾经遇到对各种问题列出来&#xff0c;供喜欢linux对人参考&#xff1a; linux下以root身份成功运行chromium…