Administrator
发布于 2023-08-03 / 406 阅读
0
0

ES入门

1、es基本概念

es(elasticsearch):主用于检索,但也有存储,检索(Query DSL),分析(Aggregation(聚合))三个能力,与用于持久化的mysql相比,有三个概念需要理解。
mysql中,一个数据库,有多张表,表中有多个字段。
为简便理解,es中的三个概念可以与之相对应

index索引
类比mysql的数据库概念

Type类型(8.0版本之后没有类型的概念了)
类比mysql的表概念

Document文档
类比mysql的记录概念

保存一个数据,要指定保存在哪个索引的哪个类型下(哪张数据库哪张表下),
保存时用唯一标识指定对应的文档

2、es原理简述

对记录的数据进行拆分,维护生成一份倒排索引,搜索时分词查找,即将要查询的数据拆分后,查询
倒排索引表,便能知道哪些记录中有对应的数据,将所有有的记录进行相关性得分比较后,得到相应的数据

image-1691004431582

3、es安装

相应文档,其中的ip要改为自己的。

https://lly968.top/upload/2023/08/es入门.md

4、检索

_CAT
GET  /_cat/nodes:查看所有节点_
eg:http://192.168.137.14:9200/_cat/nodes :
GET  /_cat/health:查看es健康状况_
GET  /_cat/master:查看主节点_
GET  /_cat/indicies:查看所有索引 ,等价于mysql数据库的show databases;
PUT/ POST
保存一个数据,保存在哪个索引的哪个类型下,指定用那个唯一标识
PUT customer/external/1;在customer索引下的external类型下保存1号数据,
要带上要保存的json数据

POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;相同的数据
不指定id,则会一直新增。
PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,
不指定id会报错。

返回结果解析

带有下划线开头的,称为元数据,反映了当前的基本信息。

"_index":  表明该数据在哪个数据库下;

"_type":      表明该数据在哪个类型下;

"_id":                   表明被保存数据的id;

 "_version":            被保存数据的版本

"result": "created"      这里是创建了一条数据,如果重新put一条数据,则该状态会变为updated,并且版本号也会发生变化。
GET

和put,post一样的,只是标注请求方式不同,用于查看文档。

返回json解析

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

可以在请求后加入“?if_seq_no=&if_primary_term= ”,当序列号匹配的时候,才进行修改,否则不修改。

POST更新文档

eg:

http://192.168.56.10:9200/customer/external/1
会对比原来的数据,和原来的相同,则不执行任何操作(version和_seq_no)都不变。
不执行任何操作,序列号也不发生变化

http://192.168.56.10:9200/customer/external/1/_update 
重复执行更新操作,数据也能够更新成功,不会和原来的数据进行对比
删除文档或索引

注:elasticsearch并没有提供删除类型的操作,只提供了删除索引和文档的操作。

DELETE 索引/类型/文档
DELETE 索引
eleasticsearch的批量操作——bulk

语法格式:

post /索引/类型/_bulk

json
{action:{metadata}}\n
{request body  }\n

{action:{metadata}}\n
{request body  }\n

为整个索引批量操作
POST /_bulk

{"delete":{"_index":"website","_type":"blog","_id":"123"}}#删除操作

{"create":{"_index":"website","_type":"blog","_id":"123"}}#保存操作,下面是数据
{"title":"my first blog post"}

{"index":{"_index":"website","_type":"blog"}}#保存操作,下面的是数据
{"title":"my second blog post"}

{"update":{"_index":"website","_type":"blog","_id":"123"}}#更新操作
{"doc":{"title":"my updated blog post"}}
#指定操作,索引,类型,id

这里的批量操作,当发生某一条执行发生失败时,其他的数据仍然能够接着执行,也就是说彼此之间是独立的。

bulk api以此按顺序执行所有的action(动作)。如果一个单个的动作因任何原因失败,它将继续处理它后面剩余的动作。当bulk api返回时,它将提供每个动作的状态(与发送的顺序相同),所以您可以检查是否一个指定的动作是否失败了。

	之前的都可以用postman测,但这个不行,那就用kibana测试

image-1691006907463

返回结果

#! Deprecation: [types removal] Specifying types in bulk requests is deprecated.
{
  "took" : 6,	--花费的时间
  "errors" : false,	--有无错误
  "items" : [	--每个数据的结果
    {
      "index" : {	--保存
        "_index" : "customer",	--索引
        "_type" : "external",	--类型
        "_id" : "1",	--文档
        "_version" : 2,	--版本
        "result" : "updated",	--更新
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 3,
        "_primary_term" : 1,
        "status" : 200
      }
    },
    {
      "index" : {
        "_index" : "customer",
        "_type" : "external",
        "_id" : "2",
        "_version" : 3,
        "result" : "updated",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 4,
        "_primary_term" : 1,
        "status" : 200
      }
    }
  ]
}

进阶检索

官方api:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-your-data.html

https://achang.blog.csdn.net/article/details/120580720


评论