ElasticSearch 索引、类型、文档。接口的方式 CURD

参考文档:https://blog.csdn.net/gwd1154978352/article/details/82740424

索引

索引是ElasticSearch存放数据的地方,可以理解为Mysql中的一个数据库。
你可以这么理解,你不能就说他是

我们的数据被 存储和索引在分片(shards)中,索引只是一个 把一个或多个分片分组在一起的逻辑空间。(就好像说)这是一些内部细节我们不用关心分片。

对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)

在这里插入图片描述

类型

类型用于区分同一个索引下不同的数据类型,相当于MySQL中的表。在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。

在这里插入图片描述
这个还是比较好理解的

注:5.0版本之前,一个索引可以对应多个类型。5.0版本之后,一个索引只能对应一个类型

在这里插入图片描述

文档

文档是ElasticSearch中存储的实体,类比MySQL,每个文档相当于数据库表中的一行数据。 在Elasticsearch中,文档 (document) 这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。
文档由字段组成,相当于关系数据库中列的属性,不同的是ES的不同文档可以具有不同的字段集合。
对比关系型数据库:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields
12

文档元数据

一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:

节点 说明
_index 文档存储的地方
_type 文档代表的对象的类
_id 文档的唯一标识
  • _index:索引
  • _type:类型
  • _id:id仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。

说的也就是这个 ↓
在这里插入图片描述

索引创建的规则

  • 类似的数据放在一个索引,非类似的数据放不同索引
  • index中包含了很多类似的document
  • 索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

创建索引、类型、文档(接口的方式)

刚才大家也看到了我的截图是在 Kibana上操作的,但现在书写的是以 接口的方式创建,Kibana 会在后续更新出来。

就随便写写

curl -H 'Content-Type:application/json' -XPUT http://localhost:9200/Only_for_you/testing_data/1 -d "
{
    
    
      "private_id": "1",
      "title": "This is an interesting piece of data",
      "content": "I Really Really, really like you",
      "tags": ["elasticsearch", "Love Letter"]
}"
1234567

执行后 就会OK了,大家看到我在 类型的后面写了个 1,这个1 就代表了ID。如果不写的话 系统会自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突。

就比如这条数据,我们更新他 更新就不要用 put了,会error

curl -H 'Content-Type:application/json' -XPOST http://localhost:9200/Only_for_you/testing_data/ -d "
{
    
    
      "private_id": "1",
      "title": "This is an interesting piece of data",
      "content": "I Really Really, really like you",
      "tags": ["elasticsearch", "Love Letter"]
}"
1234567

返回结果

{
    
    
  "_index" : "Only_for_you",
  "_type" : "testing_data",
  "_id" : "oJVnqXIBlXk7LCfggxrl",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    
    
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}
1234567891011121314
这里简单的概述下:POST 和 PUT 上的区别
  • POST不用加具体的id,它是作用在一个集合资源之上的(/uri)
  • PUT操作是作用在一个具体资源之上的(/uri/xxx),所以要指定ID

查看文档

查看的话,方法很多种。

curl -H 'Content-Type:application/json' -XGET http://localhost:9200/Only_for_you/testing_data/1?pretty
1
美化返回结果

返回的响应包含了现在熟悉的元数据节点,增加了_source字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档。

  • pretty:在任意的查询字符串中增加pretty参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。
  • _source字段不会被美化,它的样子与我们输入的一致,现在只包含我们请求的字段,而且过滤了date字段。

如果你只想得到_source字段而不要其他的元数据,你可以这样请求:

curl -H 'Content-Type:application/json' -XGET http://localhost:9200/Only_for_you/testing_data/1/_source
1
返回响应头消息

请求返回的响应内容包括 {“found”: true}。这意味着文档已经找到。如果我们请求一个不存在的文档,依旧会得到一个JSON,不过found值变成了false。此外,HTTP响应状态码也会变成’404 Not Found’代替’200 OK’。我们可以在curl后加-i参数得到响应头:

curl -H 'Content-Type:application/json' -i -XGET http://localhost:9200/Only_for_you/testing_data/1?pretty
1

返回结果:

HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 337

*********** 以下数据省略 ************
123456

更新文档

curl -H 'Content-Type:application/json' -XPOST http://localhost:9200/Only_for_you/testing_data/1/_update -d '{
    
    
  "script": "ctx._source.content = \"new content\""
123

删除文档

curl -XDELETE http://localhost:9200/blog/article/1 
1

增删改查 简单的概述下

命令 含义
POST /uri 创建
DELETE /uri/xxx 删除
PUT /uri/xxx 更新或创建
GET /uri/xxx 查看

猜你喜欢

转载自blog.csdn.net/weixin_47587864/article/details/108565389