Easticsearch概述(ES、Lucene、Solr)一
ES是在Lucene的基础上实现的
1、Lucene全文检索
lucene是一个全文搜索框架,而不是应用产品。因此它并不像http://www.baidu.com/或goolge Destop 那么拿来就用,它只是提供了一种工具让你能实现这些产品
1、lucene能做什么呢
要回答这个问题,先要了解lucene的本质。实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。知道了这个本质,你就可以发挥想象做任何符合这个条件的事情了,,你就可以吧站内新闻都索引了,做个资料库,你可以吧一个数据库表的若干个字段索引起来,那就不用担心因为“%like%”而锁表了;你也可以写个自己的搜索引。。
2、该不该选择lucene
下面给出一些测试数据,如果你觉得可以接受,那么可以接受
测试一:250万记录,300M左右文本,生成索引380M左右,800线程下平均处理时间300ms
测试二:37000记录,索引数据库中的两个varchar字段,索引文件2.6M,800线程下平均处理时间1.5ms
3、倒排索引
正排索引
我是中国人(1)
中国是全球人口最多的国家,中国人也最多
1、我, 是 , 中国 ,中国人
2、中国,是,全球。。。。
倒排索引
1、我 (1:1{0} #第一行出现一次,在第一行中偏移量0
2、中国 (1:1){2},(2:2){0,15} #第一行出现一次,偏移量2,第二行出现2次,偏移量0和15
文章数量和索引数量之间的关系?没关系
document:java instance
使用:
nutch爬虫
solr基于Lucene做的web项目,搜索引擎
数据存储:hadoop
数据计算:MapReduce
数据的随机存储:HBase
ElasticSearch介绍:
ElasticSearch是一个基于Lucene的实时的分布式搜索和分析引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。基于RESTFUL接口
ElasticSearch VS Solr总结
1、ES基本是开箱即用,非常简单。solr安装比较哦复杂
2、Solr利用Zookeeper进行分布式管理,而ES自身带有分布式协调管理功能
3、Solr支持数据格式:JSON、XML、CSV,而ES仅支持json文件格式
4、Solr官方提供的功能很多,而ES本身更注重于狠心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
5、Solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;ES建立索引快(即查询慢),即实时性查询快,用于facebook、GitHub、新浪等搜索
6、Solr是传统搜索应用的有力解决方案,但ES更适用于新兴的大数据实时搜索应用
ES和关系型数据库对比
ES的优点
1、分布式:ES的自动发现机制会识别新增的节点并重新平衡分配数据
2、全文检索:ES后台使用Lucene提供全文检索,自带多语言支持、强大的查询语言、地理位置支持、上下文感知的建议、自动完成和搜索片段
3、近实时搜索和分析:数据从进入ES到能够搜索到是近实时的,除了搜索,ES也可以进行聚合分析操作
4、高可用:ES会自动发现新的或失败的节点,重组和重新平衡数据,确保数据是安全和可访问的
5、模式自由:ES的动态Mapping机制可以自动检测数据的结构和类型,创建索引,并使数据可搜索
6、RESTFUL API:几乎任何操作都可以使用一个简单的Restful API,JSON基于HTTP请求来实现,客户端也可以使用多种编程语言
ES应用场景:
站内搜索:Facebook、新浪微博、论坛等的站内搜索
NoSQl数据库:ES读写性能优于MongoDB,同时也支持地理位置查询
日志分析:日志分析由实时日志分析平台ELK完成,能够对日志进行集中的收集、存储、搜索、分析、监控以及可视化
ES的单机模式架构原理图:
在单台ES服务器节点上,随着业务量的发张索引文件慢慢增多,会影响效率和内存存储问题等
可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等
ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本,通过将一个单独的索引分为多个分片,我们可以处理不在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力
ES集群架构图:
ES集群中的名词:
Cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点,这个结案是可以通过选举产生的,主从节点是对于集群内部来说。ES的一个概念就是去中心化,字面上理解就是务中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上时个整体,你与任何一个节点的通信和与整个ES集群通信时等价的
Shards
代表索引分片,es可以吧一个完整的索引分成多个分片,这样的好处是可以吧一个大的索引分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复,二十提高es的查询效率,es会自动对索引请求进行负载均衡
Recovery
代表数据恢复或数据重新分布。es在有节点假如或退出时会根据机器的负载均衡对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复
Easticsearch概述(ES、Lucene、Solr)一的更多相关文章
- Lucene/Solr开发经验
1.开篇语2.概述3.渊源4.初识Solr5.Solr的安装6.Solr分词顺序7.Solr中文应用的一个实例8.Solr的检索运算符 [开篇语]按照惯例应该写一篇技术文章了,这次结合Lucene/S ...
- apache lucene solr 官网历史版本下载地址
官网上一般只提供最新版本的下载,下面两个链接为所有历史版本的下载地址: lucene地址:archive.apache.org/dist/lucene/java/ solr地址:archive.apa ...
- Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...
- Lucene/Solr搜索引擎开发笔记 - 第2章 Solr安装与部署(Tomcat篇)
一.安装环境 图1-1 Tomcat和Solr的版本 我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1- ...
- lucene&solr学习——solr学习(一)
1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...
- 全文检索(Lucene&Solr)
全文检索(Lucene&Solr) 1)什么是全文检索?为什么需要全文检索? 结构化数据(mysql等)方便查询,而非结构化数据(如多篇文章)是难以查询到自己需要的,所以要使用全文检索. 全文 ...
- Lucene&Solr框架之第二篇
2.1.开发环境准备 2.1.1.数据库jar包 我们这里可以尝试着从数据库中采集数据,因此需要连接数据库,我们一直用MySQL,所以这里需要MySQL的jar包 2.1.2.MyBatis的jar包 ...
- es与solr对比
solr相关资料 自带Jetty服务器,也可以在tomcat发布solr,默认端口8983: 利用SolrJ操作solr API: Document文档和JavaBean相互转换,用到@Field(& ...
- lucene/solr 修改评分规则方法总结
说明:由于solr底层使用的是lucene,因此修改solr打分机制归根结底还是依赖于lucene的打分机制,本文主要讨论lucene的打分机制. 本文说明lucene 常用的四种影响评分结果的方式. ...
随机推荐
- SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点.是一款基于分 ...
- Table.Range保留中间指定的….Range/Middle(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- 资源相关视图(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 这里就扯到资源了,资源是啥意思?如果是教科书,怕又是有一个名词解释要背吧,吼吼--其实这个资源在这里的意思基本上猜就能猜到 ...
- CF1428A Box is Pull 题解
Content 有一个兔子拖着一个盒子在走,每秒钟可以带着盒子走一个单位,也可以不带着盒子走一个单位.当且仅当兔子和盒子的距离不超过 \(1\) 时可以带着盒子走一个单位.现给出 \(t\) 次询问, ...
- Python3 json &pickle 数据序列化
json 所有语言通用的信息交换格式 json.dumps()将list列表.dict字典.元组.函数等对象转换为可以存储的字符格式存入文件 json.dump(数据对象名,已以写方式打开的对象) 直 ...
- libevent源码学习(2):内存管理
目录 内存管理函数 函数声明 event-config.h 函数定义 event_mm_malloc_ event_mm_calloc_ event_mm_strdup_ event_mm_reall ...
- IDEA报错 Error:(24, 35) java: 常量字符串过长
修改设置
- springboot 整合activemq
1.配置连接信息 spring: activemq: broker-url: tcp://192.168.1.28:61616 user: admin password: 123456 package ...
- JAVA获取当前年份,月份、日期、小时、分钟、秒等
import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar cal ...
- Hibernate 限制查询数目,使用limit功能
在hql语句中,不能使用limit来限制显示的条数. 如果要限制查询的数目,要使用setMaxResults(e)方法来解决. query.setFirstResult(e); //e是int值,要 ...