一、索引
在上一节我们使用了postman进行了一些简单的添加索引和文本测试,接下来试试在Head和Kibana中进行相关操作。
1.1、新建索引
1.1.1、使用Head新建
在head 插件中,选择 索引选项卡,然后点击新建索引。新建索引时,需要填入索引名称、分片数以及副本数。
创建成功后如下图:中间的数字0-4代表分片,粗框表示主分片,细框表示副本。上一节创建的test索引没有指定分片数和副本数,默认只有1分片和1副本。
1.1.2、使用Kibana新建
进入Kibana客户端,在右侧选到Dev Tools,在控制台中执行新建操作。
新建时如果想指定分片数和副本数,可以在settings中分别设置number_of_shards和number_of_replicas来定义,注意要使用json格式。
注意:索引名称不能有大写字母,且唯一,否则都会报错。
1.2、索引属性
索引新建之后,还可以使用_settings修改属性,例如修改副本数:
PUT book/_settings
{
"number_of_replicas": 2
}
_settings中还可以设置很多属性
需要注意,分片数新建之后不能修改。
也可以使用GET请求查看索引属性:
GET goods/_settings // 查看goods索引属性
GET goods,test/_settings // 同时查看goods和test索引属性
GET _all/_settings // 查看所有索引属性
1.3、删除索引
在Head中可以点击索引的动作下拉选项中的删除,在弹出框中输出“删除”即可删除索引。
也可以使用DELETE请求删除
DELETE goods
1.4、索引打开和关闭
POST goods/_close // 关闭索引
POST goods/_open // 打开索引
1.5、复制索引
复制索引只会复制数据,不会复制索引的配置属性
POST _reindex
{
"source": {"index":"goods"},
"dest": {"index":"goods_new"}
}
1.6、索引别名
如果索引别名是唯一的,可以替代索引名称
POST /_aliases
{
"actions": [
{
"add": { // 将 add 改为 remove 就表示移除别名
"index": "goods",
"alias": "goods_alias"
}
}
]
}
GET goods/_alias // 查看某个索引的别名
GET goods_alias // 查看某个别名对应的索引
GET _alias // 查看所有别名
二、文档
2.1、新建文档
使用Kibana分别新建两个文档:
PUT goods/_doc/1
{
"class": "家电",
"title": "液晶屏电视机",
"contest": "创维官方旗舰店85A9 85英寸4K高清智能网络家电平板液晶屏电视机"
}
PUT goods/_doc/2
{
"class": "家电",
"title": "吸油烟机",
"contest": "A.O.史密斯顶侧双吸油烟机CXW-200-Q3+"
}
文档新建成功后,响应的json如下:
{
"_index" : "goods",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
- _index 表示文档索引。
- _type 表示文档的类型。
- _id 表示文档的 id。
- _version 表示文档的版本,更新文档时,版本会自动加 1,针对于文档。
- result 表示执行结果。
- _shards 表示分片信息。
- _seq_no和_primary_term这两个也是版本控制用的,针对于索引 index。
可以在head插件中查询数据:
说明:新建文档必须包含三个元数据,同时这三个元数据可以唯一标识一个文档:
- _index:表示文档在哪存放,指索引。我们请求中存放的是goods索引。
- _type:文档表示的对象类别。我们请求中定义的是_doc。
- _id:和_index、_type组成文档唯一标识,可以新建文档是时候指定,也可以忽略让es自动生成。我们请求中分别定义的是1和2。
参考官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_Document_Metadata.html
回顾一下,前面我们用postman测试ik分词器时,使用的请求语法和现在有点差别:
POST goods/_create/1
{
"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
}
1、 我们省略了_type元数据,es会根据文档内容,自动给我们加上_doc的类型:;
2、 前面说到es通过三个元数据_index、_type、_id来确认文档唯一性如果请求中没有加上_create参数,es会根据元数据查找文档,文档存在更新数据,不存在则新建文档而加上_create参数后,文档存在会返回409响应码:;
3、 es官方文档中,推荐使用POST请求且不指定_id,让es自动生成的方式来新建文档如果业务中必须指定_id,或者已经有自己的_id,那么可以用以下两种方式告诉Elasticsearch,只有相同的_index、_type、_id都不存在时,才创建新文档;
- 使用op-type查询-字符串参数,如:PUT /goods/_doc/1?op_type=create
- 在URL 末端使用/_create,如:PUT /goods/_doc/1/_create
参考官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/create-doc.html
2.2、获取文档
可以使用GET请求查看文档,同样也是通过三个元数据指定查询。存在返回文档数据,不存在返回404响应码和报错信息。
GET goods/_doc/1
同样也支持批量查询。在js中,HTTP 请求库是不允许 GET 请求有请求体的,虽然 es 工程师倾向于使用 GET 做查询,但是为了保证兼容性,es 同时也支持使用 POST 查询。
GET goods/_mget
{
"ids": ["1","2"]
}
2.3、文档更新
注意,文档更新一次,version就会自增1。
1、 像前面说的,可以三个元数据指定文档,直接更新整个文档这种更新会覆盖掉原文档,要谨慎使用!;
2、 大多数时候,我们只需要更新文档字段,可以通过脚本实现更新的请求格式:POST{index}/_update/{id};
POST goods/_update/1
{
"script": {
"lang": "painless",
"source":"ctx._source.class=params.class",
"params": {
"class":"大家电"
}
}
}
在脚本中,lang 表示脚本语言,painless 是 es 内置的一种脚本语言。source 表示具体执行的脚本,ctx 是一个上下文对象,通过 ctx 可以访问到文档具体内容。
3、 往文档中添加字段;
POST goods/_update/1
{
"script": {
"lang": "painless",
"source":"ctx._source.price=11999"
}
}
4、 使用更复杂的ifelse;
POST goods/_update/1
{
"script": {
"lang": "painless",
"source":"if (ctx._source.price < 10000) {ctx._source.price = 10000} else {ctx._source.price = 15000}"
}
}
5、 查询更新,将查询和更新操作合并,通过条件查询到文档再执行更新例如查询价格price为10000的商品,将价格更新为15000;
POST goods/_update_by_query
{
"script": {
"lang": "painless",
"source":"ctx._source.price = 15000"
},
"query": {
"term": {
"price": "10000"
}
}
}
2.4、文档删除
1、 根据id删除,请求格式为:DELETE{index}/{_type}/{id};
DELETE goods/_doc/1
如果在添加文档时指定了路由,则删除文档时也需要指定路由,否则删除失败。
2、 查询删除,使用POST请求删除price为11999的文档,和删除goods索引下所有文档;
POST goods/_delete_by_query
{
"query": {
"term": {
"price": "11999"
}
}
}
POST goods/_delete_by_query
{
"query": {
"match_all": {
}
}
}
2.5、批量操作
es中通过 Bulk API 可以执行批量索引、批量删除、批量更新等操作。
参考官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/bulk.html
版权声明:
本文仅记录ElasticSearch学习心得,如有侵权请联系删除。
更多内容请访问原创作者:
微信公众号:江南一点雨
B站:https://space.bilibili.com/49484631?from=search&seid=6136072956000981995
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: