找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ Nosql与大数据 ] 【守望者 大数据】基于Lucene的Elastic Search系统

2014-10-11 17:22| 发布者: watchmen | 查看: 859 | 收藏

摘要: Lucene简介Lucene系统是当前最为流行的基于Java的全文搜索引擎工具,它并不是一个完整的搜索引擎系统,仅仅是为其它应用程序提供信息索引和搜索。目前市面上有大量基于Lucene的具有搜索功能的应用程序,例如Eclipse ...
Lucene简介
Lucene系统是当前最为流行的基于Java的全文搜索引擎工具,它并不是一个完整的搜索引擎系统,仅仅是为其它应用程序提供信息索引和搜索。
目前市面上有大量基于Lucene的具有搜索功能的应用程序,例如Eclipse在其帮助系统中搜索功能就是基于Lucene。Lucene为文本型数据建立全文索引,只需要能把要索引的具体数据以文本格式存储的,Lucene就能对该文本文档进行索引和搜索。例如要对HTML文档内容,PDF文档内容进行索引则需要把HTML文档和PDF文档转化成文本文档格式,然后将转化后的内容传递给Lucene进行索引,最后把创建好的索引文件保存到磁盘中,或者缓存在内存中。根据终端用户输入的查询关键字及要求在索引文件上进行搜索,根据索引项返回相应的原始信息。如图2-2表示了搜索应用程序和Lucene之间的关系。
  
图 搜索系统与ElasticSearch的关系

基于Lucene的Elastic Search架构概览
如图所示为Lucene索引部分的架构图。整个系统采用各种文档解析工具对各种不同类型的文档进行信息处理,然后其转换为文本格式的文件。例如一个HTML文件,HTML解析器将完成一定处理操作。其输出的内容则是文本内容,然后分词工具(Analyzer)对文本进行必要的分词处理,然后提取出索引内容,接着把这些信息添加索引数据库文件中去。而相应的查询操作也首先进行分词处理,然后获取到相应的索引项,最终根据相应地索引信息返回具体的原始内容[16]。
  
图 Lucene系统结构
Lucene系统将所有源码分为7个模块,各个模块完成特定的功能:
(1)analysis模块主要功能:分词模块。分词模块的主要工作由Analyzer部分的扩展类来具体实现,Lucene系统自带有相应的StandardAnalyzer类来完成;
(2)index模块主要功能:数据库的读写操作接口模块。通过该接口用户可以完成创建、添加、删除相关记录及读取相关记录操作等;
(3)search模块主要功能:检索接口模块。通过该接口,用户可以输入不同的查询条件,从而得到需要查询结果内容。
(4)queryParser模块主要功能:这一部分是查询和分析器模块,用户可以根据自己的特定需求进行模块定制;
(5)document模块主要功能:存储结构模块,该接口是文档(document)的抽象描述接口;
(6)store模块主要功能:该接口用于底层存储结构I/O的操作;
(7)util模块主要功能:该接口是公用的数据结构。


Lucene搜索系统和及其它搜索系统比较
基于Lucene搜索系统的特点,Lucene比一般的数据库在查询方面具有更强的优势和更广泛的应用。如表2-1所示,Lucene最核心的特点是通过特殊的索引结构实现了传统数据库难以实现的全文索引机制,并提供了通用扩展接口,以方便针对不同用户,不同应用环境的定制

表2-1 Lucene搜索引擎与数据库的对比

Lucene搜索引擎
数据库
索引比较
将数据源中的数据通过全文索引来建立倒排序索引信息
数据需要逐个遍历记录字符串进行GREP式的模糊匹配,比有索引的搜索速率要低几个数量级
可定制性比较
通过不同类型的语言分析接口,可以轻易地定制出符合需要的索引规则
没有接口或接口实现太过于复杂,无法定制处理
匹配度比较
有强大匹配度算法,将匹配程度(相似度)高的结果输出前面。
没有匹配程度的控制:比如有记录中net出现6次和出现1次的,结果是一样的。
匹配效果比较
通过词元(term)进行匹配,通过语言分析接口的实现,可以实现对中文、日文等非英语类语言的支持。
使用如下语法:like"%net%"会把netherlands匹配出来。
  
使用like"%com%net%":则不会匹配词序颠倒的xxx.net..xxx.com内容。
结果输出比较
通过特定的比较算法,将匹配度最高的前多少条结果返回,结果集采用缓冲式的小批量读取方式。
返回所有的结果集操作,在匹配数特别多的时候(比如上万条)需要大量的内存存放这些临时结果集。
比较结论
高负载的模糊性查询操作,需要设置模糊查询的规则,另外索引的资料量会相当大
使用率低,模糊匹配采用的规则比较简单,或者本身需要采用模糊查询的内容少

会员评论  

已有0参与评论

推荐阅读

【守望者  j2se】双向链表模拟
【守望者 j2se】双向链表模拟
我们熟悉了java单向链表的模拟,现在我就必须开始双向链表的模拟的.1.基础结构
【守望者  j2se】ConcurrentHashMap原理分析
【守望者 j2se】ConcurrentHashMap原
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据
【守望者 高并发】现有高并发WEB服务器 lighttpd Apache Nginx比较
【守望者 高并发】现有高并发WEB服务器
lighttpd网络服务器基于的Lighttpd的网络服务器具有这样的特点:占用内存资源
【守望者 高并发】C10K/C500K与I/O框架
【守望者 高并发】C10K/C500K与I/O框架
C10K、C/500K问题C10K 的意思是10000并发请求,C500K意思是500 000并发请求,
【守望者  JMM】理解volatile内存语义
【守望者 JMM】理解volatile内存语义
理解volatile变量对写多线程程序还是很有帮助的,这样就会避免一上来就是syn这
【守望者  j2se】虚拟机各部分内存溢出情况
【守望者 j2se】虚拟机各部分内存溢出
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况:(1).java堆溢出:
【守望者 大数据】Mahout学习路线图
【守望者 大数据】Mahout学习路线图
Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Z
【守望者 高并发】使用CAS实现高效并发处理
【守望者 高并发】使用CAS实现高效并发
守望者:在并发处理应用中,一般使用锁的方式来解决竞争问题,但锁的效率比较
【守望者  j2se】吃透 java I/O 工作机制-1
【守望者 j2se】吃透 java I/O 工作机
I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这
【守望者 j2se】ConcurrentMap之putIfAbsent(key,value)用法讨论
【守望者 j2se】ConcurrentMap之putIfA
先看一段代码:public class Locale { private final static MapString, Lo
【守望者 大数据】机器学习已成为大数据的基石
【守望者 大数据】机器学习已成为大数
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、
【守望者  javascript】判断IE浏览器世界上最短的代码
【守望者 javascript】判断IE浏览器世
最短的IE判定var ie=!-分析以前最短的IE判定借助于IE不支持垂直制表符的特性
【守望者  j2se】多线程与并发知识点总结
【守望者 j2se】多线程与并发知识点总
对于多线程和并发编程这个比较大的技术模块,我们会整理一些帖子方便知识点的
【守望者  j2se】二叉树模拟
【守望者 j2se】二叉树模拟
接着我们就要写一个比较复杂的数据结构的,但是这个数据结构是很重要的,假如
【守望者 SRS  】SRS 源代码分析笔记(0.9.194)-分析服务器对端口的监听 ...
【守望者 SRS 】SRS 源代码分析笔记(
第一部分 分析服务器对端口的监听 端口监听与初始化(一)全局变量_srs_confi

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved