文档章节

分布式搜索 elasticsearch 概括

空_明
 空_明
发布于 2014/01/17 14:06
字数 1919
阅读 287
收藏 1

 elasticsearch 概括 

(基于互联网)

  Elasticsearch是一个基于lucene的、开源的、分布式的、RESTful的搜索引擎。Elasticsearch有如下特征:

       1. 更快的执行搜索;
       2. 安装简单;
       3. 完全自由的搜索模式;
       4. 可以简单地通过HTTP使用JSON索引数据;
       5. 分布式,可对搜索集群;
       6. 能够实时搜索;
       7. 实现简单地多租户;
       8. 等等。

       很多时候我们使用Elasticsearch来代替lucene实现搜索,当然,代替的原因是因为其可实现搜索集群。

       自由和面向文档的模式

       搜索引擎的数据模型属于模式自由以及数据库是面向文档的,以目前#nosql的发展趋势来看,使用这种数据模型来构建应用程序已经被证明是非常高效的。

         elasticsearch 的模型基于 JSON, 事实上,在近些年,它俨然已经成为数据呈现的一个标准,此外,通过JSON,可以非常简单的表示半结构化的数据,同样的,大多数编程语言都会优先支持JSON数据的解析.

        模式映射(Schema Mapping)

        elasticsearch是无模式的,你随便往里面扔一个JSON格式的文档,然后ES就可以自动的进行索引。输入的内容如果是数字或者是时间类型,ES也自动的检测出来,并做相应的处理。

        但是,众所周知,搜索引擎是非常复杂的,索引文档中的字段是可以设置BOOST值来影响打分的,另外还可以使用不同的分析器(Analyzer)用来控制怎么分词,比如有些字段是需要进行分词的,但是有些则不一定,如此等等。elasticsearch允许你完全控制这些规则,最终将一个JSON文档映射到搜索引擎里面。并且可以按索引(Index)和按类型(Type)2种级别来进行设置.。

        获取数据(GETting Some Data)

        每个索引的文档都必须要有一个唯一标识(在类型级别),在很多时候这是非常有用的,比如你想更新或者删除某一个索引文档,或者只是想拿一条索引数据看看。获取数据真是简单的不能再简单了,你只需用告诉es指定文档的索引、类型、和id就可以拿回实际的索引文档了(就是你建索引的时候的JSON文档)。

        搜索(Search)

        处理查询只需要一个简单的请求,里面隐藏了很多复杂的es提供的基于分布式的操作。可以简单的使用 Lucene通用的语法,或者使用基于JSON格式QueryDSL(DSL:领域特定语言)来构造搜索各种请求(更加灵活,方便构造复杂查询)。

        搜索可不仅仅就是查询就结束了,方面/层面(facets),高亮,自定义脚本等等都是支持的。 

        多租户(Multi Tenancy)

        单个索引既然已经有了,那为什么还会需要不止一个索引呢,其实,有很多原因需要支持多索引,比如,对日志索引可以按周来分别存放,或者是对不同的索引进行不同的设置(比如,一个使用内存作为存储,一个使用文件系统来存储)。

        当有了多个索引之后,我们就想要能够跨索引来进行搜索(或者其他操作)。 

        设置(Settings)

        能够进行配置本身就是一把双刃剑,我们想要的是能够打开就能尽快运行,中间无需任何配置,并且当有需要的时候能够控制应用程序的几乎所有方面。

        elasticsearch 从构建之初就这种理念,所以几乎所有事情都是可配和可插拔的,此外,每个索引(index)都有其独立的配置,用来覆盖主配置(master settings)。举例来说,一个索引可以配置为使用内存存储,10个分片和1个副本,而另外一个索引可以是使用文件系统存储,1个分片和10个副本。所有的索引级别(index)的设置都是可以在创建索引的时候通过YAML或者JSON格式来进行指定的。

        分布式(Distributed)

        elasticsearch的一个最主要的功能就是对分布式的支持,索引能够分拆为多个分片,每个分片可以有0个或者多个副本,集群中的每个数据节点,都可以承载一个或者多个分片,并且充当协调和处理各种操作分发到合适的分片上去。再平衡(Rebalancing)和路由(routing)这一切都是自动进行的。

        时间之门(Gateway)

        也许有一天,整个集群会崩溃(谁也无法保证因为什么原因),或者是因为特殊需要而进行关停,大多数情况,我们是需要让集群恢复到最后的一个状态的,并且让服务重新run起来 ,elasticsearch提供了一个叫做gateway的模块,允许你来做这件事情,你可以想想时间机器和搜索的结合。

        集群的状态信息(包括事务日志)可以通过每个本地存储(默认模式)来重建,或共享存储(如NFS或者Amazon S3),当使用共享存储,集群状态信息会异步的复制过去。

        此外,当使用共享存储来做持久化,索引信息可以完全的存放在内存里面,就算做整个集群的关闭再恢复也不会有问题。

       集群(cluster)

       集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

      索引分片(shards)

       es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

      索引副本(replicas)

      es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

     数据重新分布(recovery)

     es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

     数据源(river)

     也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

        Transport

代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。















© 著作权归作者所有

空_明
粉丝 35
博文 92
码字总数 71993
作品 0
东城
高级程序员
私信 提问
Elasticsearch与Solr搜索引擎选型调研文档

Elasticsearch ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开...

小海bug
2018/06/28
294
0
Elastic Search 上市了,市值翻倍,这群人财务自由了!

国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分人可...

Java技术栈
2018/10/07
0
0
CentOS7.3下ELK日志分析系统集群搭建

Elasticsearch是个基于Lucene实现的开源、分布式、restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分...

wujunqi1996
2018/07/14
0
0
Docker下安装分布式搜索引擎elasticsearch及其插件elasticsearch-head和Ik分词器

docker下安装elasticsearch 1、搜索redis镜像 2.拉取镜像(下载elasticsearch:5.6.8版本) 3.创建容器 到此elasticsearch镜像容器安装完成 打开浏览器,输入http://192.168.93.132:9200/,可...

佐半边的翅膀
2019/10/29
0
0
Elasticsearch简介与实战

什么是Elasticsearch?   Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。   Lucene 可以说是当下最先进、高性能、全功能的搜索引...

但盼风雨来_jc
2019/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ActiveMQ学习之通讯协议

一、支持的通讯协议 ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、HTTP(S)、VM 其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<TransportCon...

冥焱
20分钟前
33
0
应急广播户户通平台

一、平台概述 应急广播户户通平台为软硬一体化广播服务解决方案。实现了应急广播、视音频及图片文字信息、调频及数字广播FM、天气预报信息接收功能,以及视音频播放、智能机器人、电子日历等...

neocean
今天
83
0
如何为Apache 2.2启用mod_rewrite

我已经在我的Vista机器上安装了新的Apache 2.2,一切正常,除了mod重写。 我没有注释 LoadModule rewrite_module modules/mod_rewrite.s 但是我的重写规则都没有,即使是简单的重写规则 Re...

javail
今天
23
0
移除Python unicode字符串中的重音符号的最佳方法是什么?

我在Python中有一个Unicode字符串,我想删除所有的重音符号(变音符号)。 我在网上发现了一种用Java实现此目的的优雅方法: 将Unicode字符串转换为长规范化格式(带有单独的字母和变音符号)...

技术盛宴
今天
48
0
两周自制脚本语言-第11天 优化变量读写性能

第11天 优化变量读写性能 以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式。 11.1 通过简单数组来实现环境 假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个...

果汁分你一半
今天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部