美文网首页
Elasticsearch基础

Elasticsearch基础

作者: JBryan | 来源:发表于2021-01-21 13:02 被阅读0次

    Docker安装Elasticsearch和Kibana请参考:https://www.jianshu.com/p/804fe0fa6702

    1、_cat:

    _cat/nodes:查看节点信息


    es1.jpg

    _cat/health:查看健康状况


    es2.jpg
    _cat/master:主节点信息
    es3.jpg

    _cat/indices:查看elasticsearch所有索引(索引可类比MySQL的数据库)


    es4.jpg

    2、索引一个文档

    “索引一个文档”(用MySQL的话来讲,就是插入一条记录),需要指定索引的类型(就是指定哪个库的哪张表)

    2.1、PUT

    PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。
    PUT test/basics/1 插入test索引下,basics类型中,1号数据。

    PUT test/basics/1
    {
      "name":"Jessie"
    }
    
    es5.jpg

    返回数据中,_index代表索引(类比数据库),_type代表类型(类比表)。如果相同的请求,发送第二次,result就会变成"updated"。

    2.2、POST

    POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;


    es6.jpg

    3、查询文档

    GET /test/basics/1

    http://192.168.43.129:9200/test/basics/1
    {
        "_index": "test",//在哪个索引
        "_type": "basics",//在哪个类型
        "_id": "1",//记录id
        "_version": 1,//版本号
        "_seq_no": 0,//并发控制字段,每次更新都会+1,用来做乐观锁
        "_primary_term": 1,//同上,主分片重新分配,如重启,就会变化
        "found": true,
        "_source": {
            "name": "Jessie"
        }
    }
    

    通过“if_seq_no=0&if_primary_term=1 ”,当序列号匹配的时候,才进行修改,否则不修改。
    PUT /test/basics/1?if_seq_no=0&if_primary_term=1

    es7.jpg
    若seq_no不匹配,则更新失败。现在已经修改过id = 1这条数据,并且_seq_no为3,此时,再发上面的请求,就会返回修改失败。
    es8.jpg

    4、更新文档

    4.1、POST更新文档,带有_update

    POST /test/basics/1/_update

    es9.jpg
    更新数据时,会和原来的数据进行对比,如果数据相同,则不会执行更新操作,此时再次发送相同的请求,则不执行任何操作,序列号也不发生变化。
    4.2、POST更新文档,不带_update

    POST /test/basics/1

    es10.jpg
    在更新过程中,重复执行更新操作,数据也能够更新成功,不会和原来的数据进行对比。
    4.3、PUT更新文档

    PUT /test/basics/1

    es11.jpg
    和POST不带_update执行更新操作一样,不会和原来数据进行对比,如果重复执行更新操作,_seq_no增加。

    5、删除索引、文档

    在Elasticsearch中,没有删除类型(类比MySQL中的表)操作,只能删除索引和文档。
    删除文档:DELETE /test/basics/1

    http://192.168.43.129:9200/test/basics/1
    
    {
        "_index": "test",
        "_type": "basics",
        "_id": "1",
        "_version": 6,
        "result": "deleted",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 7,
        "_primary_term": 3
    }
    

    删除索引:DELETE /test

    http://192.168.43.129:9200/test
    
    {
        "acknowledged": true
    }
    

    6、bulk批量操作

    批量操作无法使用Postman测试,使用kibana执行测试数据。
    1、进入Kibana的Dev Tools
    访问http://{你的虚拟机地址}:5601,进入Kibana,然后点击左上角选项按钮,找到Dev Tools

    es12.jpg
    2、执行批量操作
    测试数据来自:https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json,全选,复制到Kibana中的Dev Tools执行即可。
    POST bank/account/_bulk
    es13.jpg

    7、mapping映射

    Maping是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和索引的。

    7.1、创建映射

    这里将email的type设为keyword,指定email字段只能精准匹配,不会进行分词以及全文匹配。而name字段的type为text,会进行分词以及全文匹配。建议将需要进行过滤、聚合等操作的字段设定为keyword,而一些长文本信息设定为text。

    PUT /my_index
    {
      "mappings": {
        "properties": {
          "age": {
            "type": "integer"
          },
          "email": {
            "type": "keyword"
          },
          "name": {
            "type": "text"
          }
        }
      }
    }
    

    执行结果:

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "my_index"
    }
    
    7.2、查看映射
    GET /my_index/_mapping
    

    执行结果:

    {
      "my_index" : {
        "mappings" : {
          "properties" : {
            "age" : {
              "type" : "integer"
            },
            "email" : {
              "type" : "keyword"
            },
            "name" : {
              "type" : "text"
            }
          }
        }
      }
    }
    
    7.3、添加新的字段映射
    PUT /my_index/_mapping
    {
      "properties": {
        "employee-id": {
          "type": "keyword",
          "index": false
        }
      }
    }
    

    这里的 “index”: false,表明新增的字段不能被检索,只是一个冗余字段。

    7.4、更新映射

    对于已经存在的字段映射,我们不能更新。更新必须创建新的索引,进行数据迁移
    例如要将my_index中age字段的类型改为long。
    1、创建新的索引:new_my_index

    PUT /new_my_index
    {
      "mappings": {
        "properties" : {
            "age" : {
              "type" : "long"
            },
            "email" : {
              "type" : "keyword"
            },
            "employee-id" : {
              "type" : "keyword",
              "index" : false
            },
            "name" : {
              "type" : "text"
            }
          }
      }
    }
    

    2、查看new_my_index的映射

    GET /new_my_index/_mapping
    

    执行结果:

    {
      "new_my_index" : {
        "mappings" : {
          "properties" : {
            "age" : {
              "type" : "long"
            },
            "email" : {
              "type" : "keyword"
            },
            "employee-id" : {
              "type" : "keyword",
              "index" : false
            },
            "name" : {
              "type" : "text"
            }
          }
        }
      }
    }
    

    3、将my_index中的数据迁移到new_my_index中
    先在my_index中插入一条数据:

    POST /my_index/_doc
    {
      "age": 20,
      "name": "Jessie",
      "email": "Jessie@qq.com",
      "employee-id": 1
    }
    

    迁移数据:

    POST _reindex
    {
      "source": {
        "index": "my_index",
        "type": "_doc"
      },
      "dest": {
        "index": "new_my_index"
      }
    }
    

    执行结果:

    #! Deprecation: [types removal] Specifying types in reindex requests is deprecated.
    {
      "took" : 579,
      "timed_out" : false,
      "total" : 1,
      "updated" : 0,
      "created" : 1,
      "deleted" : 0,
      "batches" : 1,
      "version_conflicts" : 0,
      "noops" : 0,
      "retries" : {
        "bulk" : 0,
        "search" : 0
      },
      "throttled_millis" : 0,
      "requests_per_second" : -1.0,
      "throttled_until_millis" : 0,
      "failures" : [ ]
    }
    

    4、查看new_my_index中的数据

    GET /new_my_index/_search
    

    执行结果:

    {
      "took" : 6,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "new_my_index",
            "_type" : "_doc",
            "_id" : "30MpLncBO375z1z5rMtJ",
            "_score" : 1.0,
            "_source" : {
              "age" : 20,
              "name" : "Jessie",
              "email" : "Jessie@qq.com",
              "employee-id" : 1
            }
          }
        ]
      }
    }
    
    

    相关文章

      网友评论

          本文标题:Elasticsearch基础

          本文链接:https://www.haomeiwen.com/subject/ysmvaktx.html