• ElasticSearch简介(一)——基础


    基本概念

    1.  Node 与 Cluster

    Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。

    单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

    2.  Index

    Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

    所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

    下面的命令可以查看当前节点的所有 Index。

    $ curl -X GET 'http://localhost:9200/_cat/indices?v'

    3.  Document

    Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

    Document 使用 JSON 格式表示,下面是一个例子。
    {

        "user": "张三",
        "title": "
    工程师",
        "desc": "
    数据库管理"
    }

    同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

     

    Index操作

    新建 Index,可以直接向 Elastic 服务器发出 PUT 请求。下面的例子是新建一个名叫weather的 Index。

    $ curl -X PUT 'localhost:9200/weather'

    服务器返回一个 JSON 对象,里面的acknowledged字段表示操作成功。

    {
        "acknowledged":true,
        "shards_acknowledged":true
    }

    然后,我们发出 DELETE 请求,删除这个 Index。

    $ curl -X DELETE 'localhost:9200/weather'

     

    数据操作

    1.  新增记录

    向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录。比如,向/accounts/person发送请求,就可以新增一条人员记录。

    PUT /accounts/_doc/1
    {
        "user": "
    张三",
        "title": "
    工程师",
        "desc": "
    数据库管理"
    }

    服务器返回的 JSON 对象,会给出 Index、Id、Version 等信息。

    {
        "_index": "accounts",
        "_type": "_doc",
        "_id": "1",
        "_version": 1,
        "result": "created",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 5,
        "_primary_term": 1
    }

    如果你仔细看,会发现请求路径是/accounts/person/1,最后的1是该条记录的 Id。它不一定是数字,任意字符串(比如abc)都可以。

    注意,如果没有先创建 Index(这个例子是accounts),直接执行上面的命令,Elastic 也不会报错,而是直接生成指定的 Index。所以,打字的时候要小心,不要写错 Index 的名称。

    2.  查看记录

    向/Index/Type/Id发出 GET 请求,就可以查看这条记录。

    GET /accounts/_doc/1

    上面代码请求查看/accounts/1这条记录,URL 的参数pretty=true表示以易读的格式返回。

    返回的数据中,found字段表示查询成功,_source字段返回原始记录。

    {
        "_index": "accounts",
        "_type": "_doc",
        "_id": "1",
        "_version": 5,
        "_seq_no": 4,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "user": "
    张三",
            "title": "
    工程师",
            "desc": "
    数据库管理"
        }
    }

    如果 Id 不正确,就查不到数据,found字段就是false。

    $ curl 'localhost: 9200/weather/beijing/abc?pretty=true'
    {
        "_index": "accounts",
        "_type": "_doc",
        "_id": "100",
        "found": false
    }

    也能只查询内容:

    GET /accounts/_source/1
    {
        "user": "
    张三",
        "title": "
    工程师",
        "desc": "
    数据库管理,软件开发"
    }

    3.  删除记录

    删除记录就是发出 DELETE 请求。

    DELETE /accounts/_doc/2

    这里先不要删除这条记录,后面还要用到。

    4.  更新记录

    更新记录就是使用 PUT 请求,重新发送一次数据。

    PUT /accounts/_doc/1
    {
        "user": "
    张三
    ",
        "title": "
    工程师",
        "desc": "
    数据库管理,软件开发"
    }

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

    上面代码中,我们将原始数据从"数据库管理"改成"数据库管理,软件开发"。 返回结果里面,有几个字段发生了变化。

    "_version" : 6,
    "result" : "updated",

    可以看到,记录的 Id 没变,但是版本(version)从1变成2,操作类型(result)从created变成updated。

  • 相关阅读:
    11.29 两百字
    Django:基础知识
    deepdiff:对比文件
    openpyxl:二次封装
    openpyxl:openpyxl的随笔
    web:pykeyboard、pymouse得使用
    Jmeter:如何让线程顺序执行
    Jmeter:如何将上一个线程得变量使用到下一个线程中,将上一个线程变量设置为全局变量
    Jmeter:BeanShell中的vars.put(string,string)
    Jmeter:数据库查询当天的日期
  • 原文地址:https://www.cnblogs.com/TianFang/p/11330167.html
Copyright © 2020-2023  润新知