ES篇:ElasticSearch教程——创建索引、类型、文档

ES知识汇总:https://blog.csdn.net/gwd1154978352/article/details/82781731

介绍

  • 索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)
  • 类型用于区分同一个索引下不同的数据类型,相当于关系型数据库中的表。在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。
  • 文档是ElasticSearch中存储的实体,类比关系型数据库,每个文档相当于数据库表中的一行数据。 在Elasticsearch中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。
  • 文档由字段组成,相当于关系数据库中列的属性,不同的是ES的不同文档可以具有不同的字段集合。 
    对比关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

文档元数据

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

节点说明
_index文档存储的地方
_type文档代表的对象的类
_id文档的唯一标识

_index:索引

_type:类型

_id:id仅仅是一个字符串,它与_index_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。

索引创建原则

  1. 类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的index里面,比如说company index,不合适的。
  2. index中包含了很多类似的document:类似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
  3. 索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

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

以kibana的方式操作ES的可以查看ElasticSearch教程——Kibana简单操作ES

以博客内容管理为例,索引名为blog,类型为article,自定义id是“1”,新加一个文档:

curl -H 'Content-Type:application/json' -XPUT http://localhost:9200/blog/article/1 -d '
{
"id": "1",
"title": "New version of Elasticsearch released!",
"content": "Version 1.0 released today!",
"priority": 10,
"tags": ["announce", "elasticsearch", "release"]
}'

自增ID

当我们想要一个自增ID的时候,直接不用设置id即可,即原来是把文档存储到某个ID对应的空间,现在是把这个文档添加到某个_type下(注意:这边是POST不是PUT)

curl -H 'Content-Type:application/json' -XPOST http://localhost:9200/blog/article/ -d '
{
"title": "New version of Elasticsearch released!",
"content": "Version 1.0 released today!",
"priority": 10,
"tags": ["announce", "elasticsearch", "release"]
}'

返回结果:

{
"_index": "blog",
"_type": "article",
"_id": "eTmX5mUBtZGWutGW0TNs",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突。

检索文档

在对应的浏览器地址栏输入如下地址

http://XXX.XXX.XXX.XX:9200/blog/article/1?pretty

或者在Linux中使用如下脚本:

curl -H 'Content-Type:application/json' -XGET http://localhost:9200/blog/article/1?pretty

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

pretty在任意的查询字符串中增加pretty参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。

_source字段不会被美化,它的样子与我们输入的一致,现在只包含我们请求的字段,而且过滤了date字段。

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

curl -H 'Content-Type:application/json' -XGET http://localhost:9200/blog/article/1/_source

返回结果:

{
"id": "1",
"title": "New version of Elasticsearch released!",
"content": "Version 1.0 released today!",
"priority": 10,
"tags": ["announce", "elasticsearch", "release"]
}

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

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

显示结果:

HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 337
{
"_index" : "blog",
"_type" : "article",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"id" : "1",
"title" : "New version of Elasticsearch released!",
"content" : "Version 1.0 released today!",
"priority" : 10,
"tags" : [
"announce",
"elasticsearch",
"release"
]
}
}

更新文档

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

删除文档

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

 

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要合理创建 ElasticsearchES索引,需要考虑以下几个方面: 1. 确定索引的名称:ES中的索引名称应该简洁明了,能够清楚地表达索引的用途或内容。 2. 确定索引的字段:确定需要存储的字段以及字段的类型。在创建索引时,需要指定每个字段的映射类型,包括文本、数字、日期等等。 3. 确定分片和副本:根据数据量和查询负载来确定分片和副本的数量,以实现最佳性能和可用性。 4. 配置索引分析器:ES中的分析器用于将文本字段拆分成单词,并将这些单词标准化以便于搜索。可以根据需要配置合适的分析器。 5. 配置索引设置:根据需要配置索引的相关设置,包括存储大小、写入限制、刷新间隔等等。 6. 优化索引性能:可以通过调整索引缓存、启用压缩、设置合理的索引刷新间隔等方式来优化索引性能。 创建索引的基本语法如下: ``` PUT /索引名称 { "settings": { "number_of_shards": 分片数量, "number_of_replicas": 副本数量 }, "mappings": { "properties": { "字段名称": { "type": "字段类型" } } } } ``` 例如,创建一个名为“my_index”的索引,包含“title”和“content”两个字段,其中“title”为文本类型,而“content”为长文本类型,可以使用以下命令: ``` PUT /my_index { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text", "analyzer": "english" } } } } ``` 以上是创建索引的基本步骤和语法,根据实际需求,可以进一步配置索引的设置和优化性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值