一个刚有官网的公司怎么做网站运营,传媒公司起名字大全免费,如何发布一个自己的网站,微信小程序开挂方法在上篇文章写了关于elasticsearch索引的数据类型#xff0c;这里就详细说下索引的增删改查以及其他的一些操作吧。
1、索引的增、删、改、查
先新建一个索引结构#xff0c;代码如下
PUT test-3-2-1
{mappings: {properties: {id: {这里就详细说下索引的增删改查以及其他的一些操作吧。
1、索引的增、删、改、查
先新建一个索引结构代码如下
PUT test-3-2-1
{mappings: {properties: {id: {type: integer},sex: {type: boolean},name: {type: text,fields: {keyword: {type: keyword,ignore_above: 256}}},born: {type: date,format: yyyy-MM-dd HH:mm:ss},location: {type: geo_point}}}
}1.1向索引添加一条数据。
POST test-3-2-1/_doc/1
{id: 1,sex: true,name: 张三,born: 2020-09-18 00:02:20,location: {lat: 41.12,lon: -71.34}
}注意test-3-2-1/_doc/1在增加的请求中_doc表示索引的type1表示_id,代表主键的意思如果存在就会被覆盖。
1.2 获取索引内容
GET test-3-2-1/_doc/11.3 修改索引数据
POST test-3-2-1/_update/1
{doc: {sex: false,born: 2020-02-24 00:02:20}
}1.4 删除索引
DELETE test-3-2-1/_doc/11.5 索引数据的批量写入
POST test-3-2-1/_bulk
{index:{_id:3}}
{id:3,name:王五,sex:true,born:2020-09-14 00:02:20,location:{lat:11.12,lon:-71.34}}
{index:{_id:4}}
{id:4,name:李四,sex:false,born:2020-10-14 00:02:20, location:{lat:11.12,lon:-71.34}}
{index:{_id:5}}
{id:5,name:黄六,sex:false,born:2020-11-14 00:02:20, location:{lat:11.12,lon:-71.34}}这样可以批量写入通过index值如果已经存在会覆盖。
2、索引的重建和使用乐观锁进行并发控制
索引的重建先创建一个索引以及分片规则然后就可以进行移动了
PUT newindex-3-1-3
{settings: {number_of_shards: 5,number_of_replicas: 1}
}
POST _reindex
{source: {index: test-3-2-1},dest: {index: newindex-3-1-3}
}2.1 使用乐观锁进行并发控制
低版本的Elasticsearch使用了_version字段来实现乐观锁在Elasticsearch 7.9.1中使用_version进行并发控制会报错。它提供了两个新的字段_seq_no和_primary_term一起来实现乐观锁。假如你查出主键为1的文档的当前_seq_no为26、_primary_term为3他是内置的而且要两个参数一起判断才可以。
PUT test-3-2-1/_doc/1?if_seq_no26if_primary_term3
{id: 1,sex: false,name: 张三,born: 2020-09-11 00:02:20,location: {lat: 41.12,lon: -71.34}
}3、索引的别名
想象这样一种场景假如有一个索引只有一个主分片但是时间久了以后数据量越来越大你决定为索引扩容可是又不愿意重建索引。一个解决问题的办法就是你可以创建一个新的索引保存新的数据然后取一个别名同时指向这两个索引这样在检索时使用别名就可以同时检索到两个索引的数据。
3.1 别名的创建和删除
先来新建两个索引logs-1和logs-2并添加数据。
POST logs-1/_doc/10001
{visittime: 10:00:00,keywords: 世界杯,rank: 18,clicknum: 13,id: 10001,userid: 2982199073774412,key: 10001
}
POST logs-2/_doc/10002
{visittime: 11:00:00,keywords: 奥运会,rank: 11,clicknum: 2,id: 10002,userid: 2982199023774412,key: 10002
}添加一个索引别名logs指向这两个索引。
POST /_aliases
{actions: [{add: {index: logs-1,alias: logs}},{add: {index: logs-2,alias: logs}}]
}查看刚才创建的别名logs包含哪些索引可以用下面的代码
GET _alias/logs如果要删除索引logs-1的别名可以使用以下代码。
POST /_aliases
{actions : [{ remove: { index : logs-1, alias : logs } }]
}使用正则添加别名以logs开头的索引都为别名
POST /_aliases
{actions : [{ add : { index : logs*, alias : logs } }]
}配合使用别名和数据过滤可以达到类似于数据库视图的效果可以把查询条件放入别名这样在搜索别名时会自动带有查询条件能起到数据自动过滤的作用。例如
POST /_aliases
{actions: [{add: {index: logs*,alias: logs,filter: {range: {clicknum: {gte: 10}}}}}]
}3.2 滚动索引
滚动索引当有一个索引数据量太大时如果继续写入数据可能会导致分片容量过大查询时会因内存不足引起集群崩溃。为了避免所有的数据都写入同一个索引可以考虑使用滚动索引。滚动索引需要配合索引别名一起使用可实现把原先写入一个索引的数据自动分发到多个索引中。
先创建一个索引log1它有一个别名logs-all。
PUT /log1
{aliases: {logs-all: {}}
}然后使用别名往log1中写入数据。
PUT logs-all/_doc/1?refresh
{visittime: 10:00:00,keywords: 世界杯,rank: 18,clicknum: 13,id: 10001,userid: 2982199073774412,key: 10001
}
PUT logs-all/_doc/2?refresh
{visittime: 11:00:00,keywords: 杯,rank: 20,clicknum: 12,id: 1121,userid: 298219d9073774412,key: 2
}现在来为别名logs-all指定一个滚动索引如果条件成立就把新数据写入log2。
POST /logs-all/_rollover/log2
{conditions: {max_age: 7d,max_docs: 1,max_size: 5gb}
}上面的滚动索引配置的条件是如果往别名logs-all中写入的索引数据量大于等于1或者主分片总大小超过5GB或者创建索引的时间长度超过7天就把新的数据写入新索引log2。该请求会返回滚动索引的执行结果结果如下。
我们也可以自动向下滚动
PUT /log-000001
{aliases: {logseries: {}}
}
POST /logseries/_rollover
{conditions: {max_age: 7d,max_docs: 1,max_size: 5gb}
}