lucene大索引文件分布式存储方案
这几天实现了个Lucene分布式检索的模块,采用的分布式方案是将数据分块,分别生成N个索引文件,放到N个节点上运行。检索时,对每一个节点发出查询请求,将N个节点返回的结果归并,然后生成一个新的结果。如果没看明白,可以看看我的帖子 http://www.iteye.com/topic/212046 ,这个方案同帖子中的思想是一致的。
用这样的方案,遇到的问题是归并过后的结果,同没有归并结果是有一定区别的。在实现这个方案前我也分析过,Lucene使用TF/IDF算法来计算相关度,所以会产生这样的问题:
100万条数据,分别索引成2个50万数据的索引文件A,B和100万条数据的索引文件C。这样,A、B、C3个文件的IDF都不相同,所以搜索出来的结果将会不同。但是如果是海量数据,IDF值从统计学角度上来说应该是非常相似的,所以搜索出的结果大体上来说是一样的。
今天专门做了一个实验,取100万条数据做测试,每个节点50万数据,进行几个关键词的检索,同包含100万条同样数据的索引文件比较,取前100项统计有多少项不同。数据是类似www.net114.com这样的类型的数据,下面是结果(同位置是指在100条数据中,位置相同的数据。非交集指那些分布式检索返回的结果,不在集中式检索的结果之中的数据):
关键字:公司
同位置:0条
非交集:12条
“公司”这个关键字返回的结果非常多,基本返回整个数据集中的数据。这个测试针对的是目的非常模糊的查询。
关键字:永恒 公司
同位置:4条
非交集:0条
返回的结果中等,针对有一定目的的查询。
关键字:中国石油
同位置:1条
非交集:0条
针对比较精确的查询,返回的结果最前面基本都是中国石油开头的数据。
可以看到,同之前的分析结果类似,进行这样的分布式检索,基本上同集中式检索获取到的数据是相同的,但是排序不同。我已经截图下来了,但是这里貌似没法发……总体上来说,我这些精度损失在我的项目中还是可以接受的,对“公司”这种返回结果很多,搜索目的非常模糊的检索,头10项相差得比较大。但是这种搜索本身要求的精度就不是很高。而对于比较精确的搜索,头10项相差得很小,要是有兴趣的话我找个地方上传图片给大家看看。
至于性能,经过100万数据的测试,大体上能提升至少30%的检索时间,偶尔有超过单个节点查询的情况,一般是由于在网络传输层中有一些延时造成的,有的也是我系统的BUG……。进行分布式的好处在于能够处理一些无法分割的数据,保证在海量数据下也能保持足够的响应速度。
最近准备学习Java(我是用.Net的),不知道大家对这个分布式检索的方案有没有兴趣,如果有兴趣的话我就用Java实现它,希望到时候大家多多指点~~~
可以用remotesearcher, 如果节点不再用一个JVM, 如果是同一个里面, 用multisercher就行了, 里面回计算全局TF/IDF。
remotesearcher基本不能用于企业级应用。
精度问题,其实有办法解决,从我的应用来看,TF/IDF应该自己作为一个文件保存。查询时去读取保存有所有数据的TF/IDF的表,就能保证每个节点的评分都是一致的。而且,还可以做出一些扩展的东西,比如我要搜索某个行业中的数据,可以专门做一个TF/IDF表,对该行业中的某些关键字加权,这样搜出来的结果会更加符合。但是这样就要修改Lucene的源码了,这个目前我还没做,因为感觉现在这样搜出来的结果也不错。
不过为什么说remotesearcher基本不能用于企业级应用呢?我也没有在大规模的集群上测试过,目前几台计算机来看效果还可以。方便的话不妨说下,谢谢。
精度问题,其实有办法解决,从我的应用来看,TF/IDF应该自己作为一个文件保存。查询时去读取保存有所有数据的TF/IDF的表,就能保证每个节点的评分都是一致的。而且,还可以做出一些扩展的东西,比如我要搜索某个行业中的数据,可以专门做一个TF/IDF表,对该行业中的某些关键字加权,这样搜出来的结果会更加符合。但是这样就要修改Lucene的源码了,这个目前我还没做,因为感觉现在这样搜出来的结果也不错。
不过为什么说remotesearcher基本不能用于企业级应用呢?我也没有在大规模的集群上测试过,目前几台计算机来看效果还可以。方便的话不妨说下,谢谢。
lucene大索引文件分布式存储方案的更多相关文章
- Solr4.8.0源码分析(12)之Lucene的索引文件(5)
Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,S ...
- Solr4.8.0源码分析(11)之Lucene的索引文件(4)
Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValu ...
- Solr4.8.0源码分析(10)之Lucene的索引文件(3)
Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...
- Solr4.8.0源码分析(8)之Lucene的索引文件(1)
Solr4.8.0源码分析(8)之Lucene的索引文件(1) 题记:最近有幸看到觉先大神的Lucene的博客,感觉自己之前学习的以及工作的太为肤浅,所以决定先跟随觉先大神的博客学习下Lucene的原 ...
- Solr4.8.0源码分析(9)之Lucene的索引文件(2)
Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/ ...
- IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案)
原文 IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案) 对于IIS网站,大伙用的比较多,就不啰嗦了. 今天和说说大伙比较少使用的"IIS应用程序”和虚拟目录的区别 ...
- 图片文件分布式存储方案设计模式(c#--sqlserver)
1.为了降低web服务器的压力,申请了2台文件服务器,用来存放图片文件.但是两台文件服务器如何让程序自己选择呢? 于是我用了一个算法,思路如下: 从状态表筛选出可用的图片服务器集合记作C,并获取集合的 ...
- Lucene系列-索引文件
本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息.基于Lucene 4.10.0. 数据结构 索引(index)包含了存储的文档(document)正排.倒排信息,用于文本搜索. ...
- Lucene实现索引和查询
0引言 随着万维网的发展和大数据时代的到来,每天都有大量的数字化信息在生产.存储.传递和转化,如何从大量的信息中以一定的方式找到满足自己需求的信息,使之有序化并加以利用成为一大难题.全文检索技术是现如 ...
随机推荐
- Spark官方文档 - 中文翻译
Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...
- charles 抓取eclipse中的请求
charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...
- 深入java集合系列文章
搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...
- Ubuntu搭建Ruby On Rail环境
受不了Ruby在Windows上的执行等待,转战至ubuntu linux下使用,为方便不同版本ruby的使用,采用了rvm安装Ruby on rails环境. 安装rvm //获取认证 gpg -- ...
- Ubuntu的个个版本代号
首先版本号跟发布日期有关,.04 为 4月份发布,.10 则在10月份发布.另外每个版本都会选一个动物作为代号,下面是 Ubuntu 从 4.10 开始的版本代号和对应动物: Ubuntu Warty ...
- android 学习中的一些问题记录 主要是概念问题
一些问题记录 应用程序 res 目录常见的目录有哪些,分别放置什么类型的资源? animator/ 和anim/ 放的都是定义动画的XML文件,两个地方的动画类型不同. color/ XML文件:定义 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- POJ1961[KMP 失配函数]
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 16776 Accepted: 8077 Descripti ...
- android第一行代码-2.activity基本用法
摘要: 本节主要涉及到的有activity的创建,标题栏隐藏,button绑定方法(toast的使用),menu使用,活动销毁 1.activity的创建跟注册 创建: public class Te ...
- ORA-04091: table is mutating, trigger/function may not see it
今天在论坛里发现了一个关于ORA-04091的老帖子,收获良多,特此整理一下 关于ORA-04091: table is mutating, trigger/function may not see ...