zoukankan      html  css  js  c++  java
  • elasticsearch基础概念

    1. 基本语法

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

    注意

    Elasticsearch 为以下语言提供了官方客户端 --Groovy、JavaScript、.NET、 PHP、 Perl、 Python 和 Ruby--还有很多社区提供的客户端和插件,所有这些都可以在 Elasticsearch Clients 中找到。

    一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:

    curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
    

    被 < > 标记的部件含义:

    字段 含义
    VERB 适当的 HTTP 方法 或 谓词 : GETPOSTPUTHEAD 或者 DELETE
    PROTOCOL http 或者 https(如果你在 Elasticsearch 前面有一个 https 代理)
    HOST Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。
    PORT 运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。
    PATH API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。
    QUERY_STRING 任意可选的查询字符串参数 (例如 ?pretty将格式化地输出 JSON 返回值,使其更容易阅读)
    BODY 一个 JSON 格式的请求体 (如果请求需要的话)

    例如,计算集群中文档的数量,我们可以用这个(完整模式):

    curl -XGET 'http://localhost:9200/_count?pretty' -d '
    {
        "query": {
            "match_all": {}
        }
    }'
    

    想要在返回结果中看到 HTTP 头信息,需要结合 `-i 参数来使用 curl 命令:

    curl -i -XGET 'localhost:9200/'
    

    很多资料会使用缩写格式显示:

    所谓的缩写格式就是省略请求中所有相同的部分,例如主机名、端口号以及 curl 命令本身。而不是像上面例子中显示的那样用一个完整的请求

    GET /_count
    {
        "query": {
            "match_all": {}
        }
    }
    

    2. 数据架构:(官方实例:索引雇员文档)

    2.1 文档的样子

    一个 Elasticsearch 集群可以包含多个索引(类似于数据库),相应的每个索引可以包含多个类型。这些不同的类型存储着多个文档 ,每个文档又有多个属性 。

    借助以下一条查询出的结果理解:

    {
      "_index": "megacorp",
      "_type": "employee",
      "_id": "1",
      "_version": 1,
      "found": true,
      "_source": {
        "first_name": "John",
        "last_name": "Smith",
        "age": 25,
        "about": "I love to go rock climbing",
        "interests": [
          "sports",
          "music"
        ]
      }
    }
    

    每个雇员索引一个文档,包含该雇员的所有信息。

    每个文档都将是 employee 类型

    该类型位于 索引 megacorp 内。

    该索引保存在我们的 Elasticsearch 集群中。

    在 Elasticsearch 中,术语 文档 有着特定的含义。它是指最顶层或者根对象, 这个根对象被序列化成 JSON 并存储到 Elasticsearch 中,指定了唯一 ID。

    2.2 元数据

    一个文档除了自身数据外,还包括元数据(有关文档的信息)

    三个必须的元数据元素如下:

    • _index 文档在哪存放
    • _type 文档表示的对象类别
    • _id 文档唯一标识

    1> 索引

    索引名必须小写,不能以下划线开头,不能包含逗号

    实际上,在 Elasticsearch 中,我们的数据是被存储和索引在『分片』中,而一个索引仅仅是逻辑上的命名空间, 这个命名空间由一个或者多个分片组合在一起。 然而,这是一个内部细节,我们的应用程序根本不应该关心分片,对于应用程序而言,只需知道文档位于一个 索引 内。 Elasticsearch 会处理所有的细节,当然这很有意思,有兴趣可以读下相关章节- 『集群原理』(https://www.elastic.co/guide/cn/elasticsearch/guide/current/distributed-cluster.html)。

    2> 类别

    数据可能在索引中只是松散的组合在一起,但是通常明确定义一些数据中的子分区是很有用的,在索引中对数据进行逻辑分区,这将更加清晰。

    一个 _type 命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符.

    3> id

    ID 是一个字符串, 当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。

    4> 其他一些元数据

    2.3 与mysql的对比

    (1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)

    (2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type)

    (3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。

    (4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。

    (5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

    2.4 核心概念

    可能作为开发工程师以下的一些概念可能并不需要关心,但是了解下也是可以的。
    ES核心概念

    1)Cluster:集群。
    ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

    2)Node:节点。
    形成集群的每个服务器称为节点。

    3)Shard:分片。
    当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
    当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

    4)Replia:副本。
    为提高查询吞吐量或实现高可用性,可以使用分片副本。
    副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
    当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

    5)全文检索。
    全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
    全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

    2.5 什么是ELK

    ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器。其中Logstash负责日志收集,elasticsearch负责日志的搜索、统计,而kibana则是ES的展示神器,前端炫丽,点几下鼠标简单配置,就可以完成搜索、聚合功能,生成华丽的报表。

    参考

    https://cloud.tencent.com/developer/article/1066239

  • 相关阅读:
    分享自制的C#和VB Code互转工具
    C# winform 学习(一)
    C# winform 学习(二)
    C# winform 学习(二)
    C# Winform 学习(四)
    C# Winform 学习(四)
    C# winform 学习(三)
    C# winform 学习(三)
    C# Winform学习(六)
    C# Winform学习(六)
  • 原文地址:https://www.cnblogs.com/redirect/p/8436075.html
Copyright © 2011-2022 走看看