zoukankan      html  css  js  c++  java
  • Elasticsearch学习一

    Elasticsearch 学习基本操作

    一、快速入门

    节点 Node、集群 Cluster 和分片 Shards

    ElasticSearch 是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。

    索引 Index、类型 Type 和文档 Document

    对比我们比较熟悉的 MySQL 数据库:

    index → db
    type → table
    document → row

    如果我们要访问一个文档元数据应该包括囊括 index/type/id 这三种类型,很好理解。

    二、使用 RESTful API 与 Elasticsearch 进行交互

    所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:
    curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

    部件名/作用
    VERB:适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者 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": {}
        }
    }
    '
    

    对于安装了 Kibana 的我们,可以直接在 Kibana 的控制台输出以下语句,也是同样的效果.

    文档管理(CRUD)

    增加:

    POST /db/user/1
    {
      "username": "wmyskxz1",
      "password": "123456",
      "age": "22"
    }
    POST /db/user/2
    {
      "username": "wmyskxz2",
      "password": "123456",
      "age": "22"
    }
    

    这一段代码稍微解释一下,这其实就往索引为 db 类型为 user 的数据库中插入一条 id 为 1 的一条数据,这条数据其实就相当于一个拥有 username/password/age 三个属性的一个实体,就是 JSON 数据

    执行命令后,Elasticsearch 返回如下数据:

    # POST /db/user/1
    {
      "_index": "db",
      "_type": "user",
      "_id": "1",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "_seq_no": 2,
      "_primary_term": 1
    }
    
    # POST /db/user/2
    {
      "_index": "db",
      "_type": "user",
      "_id": "2",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "_seq_no": 1,
      "_primary_term": 1
    }
    

    删除:

    DELETE /db/user/1
    

    Elasticsearch 返回数据如下:

    {
      "_index": "db",
      "_type": "user",
      "_id": "1",
      "_version": 2,
      "result": "deleted",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "_seq_no": 1,
      "_primary_term": 1
    }
    

    这里就可以看到 version 变成了 2

    修改:

    PUT /db/user/2
    {
      "username": "wmyskxz3",
      "password": "123456",
      "age": "22"
    }
    

    Elasticsearch 返回数据如下:

    {
      "_index": "db",
      "_type": "user",
      "_id": "2",
      "_version": 2,
      "result": "updated",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "_seq_no": 2,
      "_primary_term": 1
    }
    

    查询:

    GET /db/user/2
    返回数据如下:

    {
      "_index": "db",
      "_type": "user",
      "_id": "2",
      "_version": 2,
      "found": true,
      "_source": {
        "username": "wmyskxz3",
        "password": "123456",
        "age": "22"
      }
    }
    
  • 相关阅读:
    Scala之eq,equals,==的区别
    Spark Streaming流计算特点及代码案例
    刷题50—水壶问题
    刷题49(力扣3道题)
    刷题48——最长回文串
    刷题47——矩形重叠
    刷题46——拼写单词
    刷题45(力扣两道题)
    刷题44——岛屿的最大面积
    刷题43——最长上升子序列
  • 原文地址:https://www.cnblogs.com/nul1/p/13266048.html
Copyright © 2011-2022 走看看