007-elasticsearch5.4.3【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念

一、概述

  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、分片和副本

  参看地址:查看 

 
原文地址:https://www.cnblogs.com/bjlhx/p/8507530.html