一、概述

  Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。

  Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目标是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  一个分布式的实时文档存储,每个字段 可以被索引与搜索
  一个分布式实时分析搜索引擎
  能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
  Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序去访问它提供的简单的 RESTful API 服务, 不论你是使用自己喜欢的编程语言还是直接使用命令行(去充当这个客户端)。

二、Elasticsearch 访问方式

2.1、Java API

  Java 客户端作为节点必须和 Elasticsearch 有相同的 版本;否则,它们之前将无法互相理解。客户端可以连接到具有不同次要版本(例如2.3.x)的群集,但可能不支持新功能。理想情况下,客户端应具有与群集相同的版本。

  两个 Java 客户端都是通过 9300 端口并使用本地 Elasticsearch 传输 协议和集群交互。集群中的节点通过端口 9300 彼此通信。如果这个端口没有打开,节点将无法形成一个集群。

  参看地址:地址

2.1.1、节点客户端(Node client)

  节点客户端作为一个非数据节点加入到本地集群中。换句话说,它本身不保存任何数据,但是它知道数据在集群中的哪个节点中,并且可以把请求转发到正确的节点。

2.1.2、TransportClient

传输客户端(Transport client)【常用】
  轻量级的传输客户端可以可以将请求发送到远程集群。它本身不加入集群,但是它可以将请求转发到集群中的一个节点上。

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300)); // on shutdown client.close();

请注意,如果使用的不同于“elasticsearch”,则必须设置群集名称:

Settings settings = Settings.builder()
.put("cluster.name", "myClusterName").build();
TransportClient client = new PreBuiltTransportClient(settings);
//Add transport addresses and do something with the client...

  传输客户端具有群集嗅探功能,允许它动态添加新主机并删除旧主机。启用嗅探后,传输客户端将连接到其内部节点列表中的节点,该列表是通过调用addTransportAddress构建的。在此之后,客户端将在这些节点上调用内部群集状态API以发现可用的数据节点。客户端的内部节点列表将仅替换为这些数据节点。默认情况下,此列表每五秒刷新一次。请注意,嗅探器连接的IP地址是那些节点的elasticsearch配置中声明为发布地址的IP地址。

  请记住,如果该节点不是数据节点,则列表可能不包括它所连接的原始节点。例如,如果您最初连接到主节点,则在嗅探之后,没有其他请求将转到该主节点,而是转到任何数据节点。传输客户端排除非数据节点的原因是避免将搜索流量发送到仅主节点。

设置

Settings settings = Settings.builder()
.put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);

常用配置如下

参数 简介
client.transport.ignore_cluster_name 设置为true以忽略已连接节点的群集名称验证。 (自0.19.4起)
client.transport.ping_timeout 等待节点ping响应的时间。默认为5秒。
client.transport.nodes_sampler_interval 对列出和连接的节点进行采样/ ping的频率。默认为5秒。
client.transport.sniff 开启嗅探
cluster.name 集群名称

2.2、RESTful API with JSON over HTTP

  所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,正如你所看到的,你甚至可以使用 curl 命令来和 Elasticsearch 交互。

三、Elasticsearch 面向文档

  Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档_。Elasticsearch 不仅存储文档,而且 _索引每个文档的内容使之可以被检索。在 Elasticsearch 中,你 对文档进行索引、检索、排序和过滤--而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。

3.1、内部json化

  Elasticsearch 使用 JavaScript Object Notation 或者 JSON 作为文档的序列化格式。JSON 序列化被大多数编程语言所支持,并且已经成为 NoSQL 领域的标准格式。 它简单、简洁、易于阅读。

四、常用概念

4.1、near realtime【NRT】

  Elasticsearch是一个接近实时的搜索平台。这意味着从索引文档的时间到可搜索的时间之间存在轻微的延迟(通常为一秒)。

4.2、Cluster集群

  群集是一个或多个节点(服务器)的集合。集群由默认名称为“elasticsearch”的唯一名称标识。此名称很重要,因为如果节点设置为通过名称加入群集,则节点只能成为群集的一部分。

4.3、Node节点

  节点是属于集群一部分的单个服务器,存储数据并参与集群的索引和搜索功能。

4.4、Index索引【相当于关系DB中的数据库】

  索引是一些具有相似特征的文档集合。例如,您可以拥有客户数据的索引,产品目录的另一个索引以及订单数据的另一个索引。索引由名称(必须全部为小写)标识,并且此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。

  在单个群集中,您可以根据需要定义多个索引。

4.5、Type类型【相当于关系DB中的数据表】

  在索引内,您可以定义一个或多个类型。类型是您的索引的逻辑类别/分区,其语义完全取决于您。通常,为具有一组公共字段的文档定义类型。

4.6、Document文档【相当于关系DB中的数据行】

  文档是可被索引的基本信息单位。例如,您可以为单个客户提供文档,为单个产品提供另一个文档,为单个订单提供另一个文档。文档以JSON(JavaScript Object Notation)表示。

  在索引/类型中,您可以根据需要存储任意数量的文档。请注意,尽管文档实际上驻留在索引中,但实际上文档必须被索引/分配给索引内的类型。

4.7、分片和副本

  参看地址:查看

 

007-elasticsearch5.4.3【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念的更多相关文章

  1. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  2. ElasticSearch权威指南学习(文档)

    什么是文档 在Elasticsearch中,文档(document)这个术语有着特殊含义.它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasti ...

  3. Elasticsearch配置详解、文档元数据

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...

  4. 从Mac的Finder中访问你的iCloud文档

    [从Mac的Finder中访问你的iCloud文档] 从OS X 10.7.2开始,iCloud就深入Mac当中,我们也可以在Finder中访问储存在iCloud中的文件,甚至当你拥有多台Mac的时候 ...

  5. ElasticSearch查询 第二篇:文档更新

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  6. ElasticSearch(二):文档的基本CRUD与批量操作

    ElasticSearch(二):文档的基本CRUD与批量操作 学习课程链接<Elasticsearch核心技术与实战> Create 文档 支持自动生成文档_id和指定文档_id两种方式 ...

  7. elasticsearch查询篇索引映射文档数据准备

    elasticsearch查询篇索引映射文档数据准备 我们后面要讲elasticsearch查询,先来准备下索引,映射以及文档: 我们先用Head插件建立索引film,然后建立映射 POST http ...

  8. 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。元素、属性和文本的树结构(节点树)。

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  9. Elasticsearch(6):文档查询

      为方便后续查询演示,我们先创建一个索引.创建索引请求如下:  

随机推荐

  1. php strpos() 函数介绍与使用方法详解

    本文主要和大家介绍PHP中mb_strpos的使用技巧,通过使用语法以及实例给大家详细分析了用法,需要的朋友参考学习下.希望能帮助到大家.mb_strpos(PHP 4 >= 4.0.6, PH ...

  2. java程序员究竟应该掌握点什么

    JAVA程序设计(基础部分) JAVA程序设计(专题)

  3. Apache 的 http-default.conf 详解

    ##Apache 默认设置文件 Timeout 300       #设置服务器在断定请求失败前等待的秒数.默认值 300 KeepAlive Off     #设置是否启用 HTTP 持久链接,On ...

  4. alex说:一切皆bytes

    一.ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示25 ...

  5. Linux文件的操作及授权

    需求1:新建除了root之外的新用户,并且新用户具有root用户的相关功能 1.首先修改/etc/sudoers文件具有写入的权限 chmod 777 /etc/sudoers 2.修改/etc/su ...

  6. 机器学习分类算法之K近邻(K-Nearest Neighbor)

    一.概念 KNN主要用来解决分类问题,是监督分类算法,它通过判断最近K个点的类别来决定自身类别,所以K值对结果影响很大,虽然它实现比较简单,但在目标数据集比例分配不平衡时,会造成结果的不准确.而且KN ...

  7. tf Dataset API

    https://zhuanlan.zhihu.com/p/30751039 https://zhuanlan.zhihu.com/p/37106443 关于其中shuffle时的buffer_size ...

  8. 前端之JQuery:JQuery文档操作

    jquery之文档操作 一.相关知识点总结1.CSS .css() - .css("color") -> 获取color css值 - .css("color&qu ...

  9. vuex使用方法

    vuex是一个专门为vue.js设计的集中式状态管理架构.状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态.简单的说就是data中需要共用的属性.比如:我们有几个页面 ...

  10. 【前端】CSS基础

    3种html中设置css的方法: head中style标签 head中link标签rel属性.href后跟css文件目录 在需要使用css样式的标签添加style属性 1.CSS选择器 #id值 .c ...