目前使用的ES版本是7,借用下其他的文档。说明下ES的存储。
ES首先是index 对应的是数据库,7以前有type的概念,7没有type的概念,也就是说现在ES7
一个库(index)只有一个表(type)。
一个表(type)可以有多行(doc)
一行(doc)有多列(mapping)
好了开始基础操作!
我们的操作无非是增删改查, 增对的就是库表(index),字段名和属性(mapping),每一行的值(doc
1.index操作
1.1增加索引
put i_dw_cc_test
1.2查看索引
get i_dw_cc_test
1.3删除索引
delete i_dw_cc_test
2.mapping操作
2.1查看映射
如果我们先存数据,es的时候会默认字段都是keyword 后面不能修改
get i_dw_cc_test/_mapping
2.2创建映射
报错了mapper [name] cannot be changed from type [keyword] to [text]
put i_dw_cc_test/_mapping
{
"properties": {
"id":{"type": "keyword","index": true},
"name":{"type": "text", "index": true},
"desc":{"type": "text","index": true}
}
}
2.3删除映射
直接删除index
delete i_dw_cc_test
2.4修改映射
3._doc操作
3.1增加数据
#以前可以指定type名 比如person 现在不行了 这个person=mysql的表
#post i_dw_cc_test/person
#{
# "id":"1",
# "name":"cc"
#}注意:简单来说就是所有es的表(type)都需要一个 唯一id 要么你自己指定,要么es随机生成
#es随机生成
post i_dw_cc_test/_doc
{
"id":"1",
"name":"cc"
}# 指定es的这条数据的id=1 这个1是_doc/1的1
post i_dw_cc_test/_doc/1
{
"id":"1",
"name":"cc1","des":"我是cc1啊"
}新增数据
post i_dw_cc_test/_doc/2
{
"id":"2",
"name":"zbf2","des":"我是cc2啊"
}
post i_dw_cc_test/_doc/3
{
"id":"3",
"name":"cclovezbf3","des":"我是cclovezbf3啊"
}
3.2更新数据
#更新数据 全量覆盖
post i_dw_cc_test/_doc/1
{
"id":"1",
"name":"cc111111111",
"sex":"man"
}
#修改数据部分覆盖
post i_dw_cc_test/_update/1
{
"doc":{
"name":"cc2222222222"
}
}
3.3删除数据
# es id=1的数据
delete i_dw_cc_test/_doc/1#条件删除文档 注意这里的请求是post
post i_dw_cc_test/_delete_by_query
{
"query":{
"match":{
"name":"cc1"
}
}
}
3.4查询数据
3.4.1匹配根据主键查询
get i_dw_cc_test/_doc/2
等价于select * from t where id =2 类似根据主键查询
3.4.2匹配查询所有数据
get i_dw_cc_test/_search
{
"query": {
"match_all": {}
}
}
类似 select * from t
3.4.3匹配查询指定字段数据
get i_dw_cc_test/_search
{
"query": {
"match": {
"name":"zbf2"
}
}
}
类似 select * from t where name like '%zbf2%' 这里会分词 不同于mysql模糊查询
3.4.4匹配查询多个指定字段数据
get i_dw_cc_test/_search
{
"query": {
"multi_match": {
"query": "1",
"fields": ["id","name"]
}
}
}
等价于 select * from t where id =1 or name=1
3.4.5精确查询
get i_dw_cc_test/_search
{
"query": {
"term": {
"name": {
"value": "zbf2"
}
}
}
}等价于select * from t where name=zbf2
3.4.6精确查询某个字段多个值
# 这里是terms select * from t where name in (zbf2,cc)
get i_dw_cc_test/_search
{
"query": {
"terms": {
"name": ["cclovezbf1","cclovezbf2"]
}
}
}等价于 select * from t where name in ("cclovezbf1","cclovezbf2")
#精确查询加指定字段 select id from t where name in (zbf2,cc)
类似 select * from t where name=1 or id =1
分词
GET /_analyze { "analyzer": "standard", "text": "Text to analyze" }
其余的一些查询
获取index的总数据量
GET /index_name/_count
获取切片的大小
GET /_cat/shards?v