ElasticSearch学习手册1

上传人:xmg****18 文档编号:118889126 上传时间:2019-12-27 格式:DOC 页数:60 大小:1.20MB
返回 下载 相关 举报
ElasticSearch学习手册1_第1页
第1页 / 共60页
ElasticSearch学习手册1_第2页
第2页 / 共60页
ElasticSearch学习手册1_第3页
第3页 / 共60页
ElasticSearch学习手册1_第4页
第4页 / 共60页
ElasticSearch学习手册1_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《ElasticSearch学习手册1》由会员分享,可在线阅读,更多相关《ElasticSearch学习手册1(60页珍藏版)》请在金锄头文库上搜索。

1、. . . .ElasticSearch学习资料内部文件:1.0颁布时间:2014.1.21可编辑目 录&文件版本说明3&参考资料3&手册目的3&声明3&名词定义和缩略语说明31.总述41.1.简介41.2.国外的使用案例41.3.基本概念解析61.3.1.Cluster61.3.2.Shards61.3.3.Replicas61.3.4.Recovery71.3.5.River71.3.6.Gateway71.3.7.discovery.zen71.3.8.Transport72.服务器搭建82.1.单机环境82.2.服务器环境82.3.中文分词集成92.4.配置详解123.Java API

2、153.1.与集群交互153.1.1.Node方式153.1.2.TransportClient方式163.2.put Mapping定义索引字段属性163.3.索引数据193.4.删除索引数据193.5.搜索203.6.批量添加索引213.7.与MongoDB同步数据223.8.使用More like this实现基于内容的推荐25& 文件版本说明表 1 版本说明版本发布时间修订章节作者1.02014.1.21第一版虞晶& 参考资料1. Elasticsearch官网:http:/ 手册目的ElasticSearch学习资料& 声明无& 名词定义和缩略语说明表 2 名词定义及缩略语说明序号缩

3、写说明1ESElasticsearch,一种设计用于云计算的分布式全文索引解决方案。1. 总述1.1. 简介ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实

4、时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的。1.2. 国外的使用案例Github“Github使用Elasticsearch搜索20TB的数据,包括13亿的文件和1300亿行的代码”这个不用介绍了吧,码农们都懂的,Github在2013年1月升级了他们的代码搜索,由solr转为elasticsearch,目前集群规模为26个索引存储节点和8个客户端节点(负责处理搜索请求),详情请看官方博客https:/ Creek“Elasticsearch使Fog Creek可以在400亿行代码中进行一个月3千万次的查询“StumbleU

5、pon”Elasticsearch是StumbleUpon的关键部件,它每天为社区提供百万次的推荐服务“StumbleUpon是个能发现你喜欢的网页的网站,进去时先注册,注册完就选择你感兴趣的东西,它会自动帮你推荐一些网页,如果你喜欢这个网页就点喜欢按钮,按 stumble按钮就会推荐下一个网页。目前其数据量达到 25亿,基本数据存储在HBase中,并用 elasticsearch建立索引,elasticsearch 在其中除了用在搜索功能还有在推荐和统计功能。之前他们是使用solr作为搜索,由于solr满足不了他们的业务增长需要而替换为 elasticsearch。MozillaMozill

6、a公司以火狐著名,它目前使用 WarOnOrange 这个项目来进行单元或功能测试,测试的结果以 json的方式索引到elasticsearch中,开发人员可以非常方便的查找 bug。Socorro是Mozilla 公司的程序崩溃报告系统,一有错误信息就插入到 Hbase和Postgres 中,然后从 Hbase中读取数据索引到elasticsearch中,方便查找。SonySony公司使用elasticsearch 作为信息搜索引擎Infochimps“在 Infochimps,我们已经索引了25亿文档,总共占用 4TB的空间”。Infochimps是一家位于德克萨斯州奥斯丁的创业公司,为大

7、数据平台提供商。它主要提供基于hadoop的大数据处理方案。1.3. Scaling Lucene怎样在Lucene之上构建一个分布式、高度伸缩、接近实时的搜索引擎呢?让我们回顾一下在搜索引擎(基于lucene)伸缩性这条路上都做了那些尝试,并且elasticsearch是如何尝试并去解决这些挑战的。首先我们了解下最基础的理论知识 building blocks (这些理论基础是构建分布式近实时搜索引擎的基础)。 接着我们研究一下到底哪种才是最佳的分区策略 partitioning (将lucene索引文档分割到多个分布式的分片中去)。 然后我们同样需要决定使用哪种分区复制方式 replica

8、tion (复制能够保证系统的高可用以及提高搜索的吞吐)。 最后,我们再看一下事务日志 transaction log (事务日志在elasticsearch里面是一个保证数据一致性的非常酷的功能)。1.3.1. Building Blocks当我们要构建一个分布式接近实时的搜索引擎,并且要让lucene可伸缩可扩展,必须首先知道lucene的关键概念以及它们与我们要达成目标的一些局限性.l DirectoryLucene Directory 是一个抽象的文件系统的接口,用来允许你读写文件,不管lucene的索引是存放在内存中还是在物理磁盘上,它都是通过lucene的Directory抽象层来

9、访问和维护的。l IndexWriterIndexWriter 用来添加、删除和更新lucene里面的索引文档。这些操作是在内存中完成以保证更好的性能,但是如果要保证这些操作的持久化,这些操作是需要flush到磁盘的。并且,flush操作或者是显式的commit提交开销都是比较大的,因为这些操作通常需要处理很多的文件,而处理这些文件又涉及到大量的磁盘io。此外, 每次只能有一个IndexWriter对象来对一个索引目录进行索引操作,并且创建这个对象的开销很大,所以必须尽可能去重用这个对象.l Index SegmentsLucene 索引被分解为很多段(segments)。每个索引段实际上是一

10、个功能完整的lucene索引,一旦一个索引段创建完成,它将是不可变的,并且不能删除段里面的索引文档。commit提交操作用来往索引里面添加一个新段。lucene内部会来对这些段进行合并,所以我们必须要有策略来控制这些合并(MergePolisy, MergeScheuler, etc)。Because segments need to be kept at bay they are being merged continuously by internal Lucene processes (MergePolisy, MergeScheuler, etc)。因为段是不可变的,所以用来做缓存(c

11、aching)是一个很好的选择,你可以加载所有的term词条并且创建一个跳跃列表( skip lists ) ,或者用来构造FieldCache,如果段没有变化,你就不需要重新加载。l IndexReaderIndexReader 用来执行搜索索引。这个对象通过IndexWriter来提供,并且创建代价也是比较高。一旦IndexReader打开之后,它就不能够发现打开之后的索引变化,如果要知道这些由IndexWriter产生的索引变化,除非刷新IndexReader对象(当然前提需要flush操作)。搜索操作在内部其实是按段来进行的(每次一个段).l Near Real-Time Search

12、获取一个新的IndexReader开销很大,所以也是我们不能每次一有索引操作就真的去获取一个新的IndexReader,你可以隔一段时间去刷新一下,比如每隔一秒钟等等,这也是我们在这里称之为接近实时( near real-time )的原因.1.3.2. Partitioning可能用来伸缩Lucene的途径(Possible approach to Scale Lucene):l Distributed Directory其中一个途径用来伸缩Lucene就是使用分布式文件系统,大文件会被拆分成chunks块并且会保存到分布式存储系统(比如 Coherence, Terracota, Giga

13、Spaces or Infinispan等等)。这样IndexWriter和IndexReader都是工作在一个自定义的Directory分布式实现上,每个操作后面其实是分布了很多个节点,每个节点上面存储了索引文件的一部分.但是这种方案有一些问题:首先,这种方案会产生密集的网络流量。尽管可以用一些高级的方法如本地缓存等,但仍然会产生大量的网络请求,因为最主要的原因是因为这种将文件拆分为块的想法与lucene索引文件构建方式和使用方式实在相隔太远,结论就是使用这种方式来做大规模索引和搜索是不切实际的。(ps:所以solandra这种玩意还是不要去考虑了)。其次,大的索引必然会使IndexReader变的无法分布式。IndexReader是一个很重的对象,并且term词条越多,其消耗的内存也会越多。最后,索引操作也会变的非常困难,因为只有一个单一的IndexWriter能够写索引。所以,我们把目光投向另一种方式。l Partitioning有2种通过将数据分区方式来scale搜索引擎: 基于文档(Document based parti

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号