cluster | 整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。 |
node | 集群中的一个节点,一般只一个进程就是一个node |
shard | 分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。 |
index | 相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。 |
type | 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一json的格式的数据集合。 |
document | 类似于rdbms的 row、面向对象里的object |
field | 相当于字段、属性 |
利用kibana学习 elasticsearch restful api (dsl)****
执行bin目录下的kibana程序:
cd /opt/kibana-5.6.4-linux-x86_64/bin
./kibana
es中保存的数据结构
public class movie { string id; string name; double doubanscore; list<actor> actorlist; }
public class actor{ string id; string name; } |
这两个对象如果放在关系型数据库保存,会被拆成2张表,但是elasticsearch是用一个json来表示一个document。
所以他保存到es中应该是:
{ “id”:”1”, “name”:”operation red sea”, “doubanscore”:”8.5”, “actorlist”:[ {“id”:”1”,”name”:”zhangyi”}, {“id”:”2”,”name”:”haiqing”}, {“id”:”3”,”name”:”zhanghanyu”} ] } |
对数据的操作增删改查
查看es中有哪些索引
get /_cat/indices?v |
es 中会默认存在一个名为.kibana的索引
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana sbdz-v6yqmwx9gaqomsqqg 1 1 1 0 3.2kb 3.2kb
表头的含义
health | green(集群完整) yellow(单点正常、集群不完整) red(单点不正常) |
status | 是否能使用 |
index | 索引名 |
uuid | 索引统一编号 |
pri | 主节点几个 |
rep | 从节点几个 |
docs.count | 文档数 |
docs.deleted | 文档被删了多少 |
store.size | 整体占空间大小 |
pri.store.size | 主节点占 |
增加一个索引
put /movie_index |
{
“acknowledged”: true,
“shards_acknowledged”: true,
“index”: “movie_index”
}
删除一个索引
es 是不删除也不修改任何数据
delete /movie_index |
{
“acknowledged”: true
}
新增文档
格式 :put /index/type/id
put /movie_index/movie/1 { "id":1, "name":"operation red sea", "doubanscore":8.5, "actorlist":[ {"id":1,"name":"zhang yi"}, {"id":2,"name":"hai qing"}, {"id":3,"name":"zhang han yu"} ] } put /movie_index/movie/2 { "id":2, "name":"operation meigong river", "doubanscore":8.0, "actorlist":[ {"id":3,"name":"zhang han yu"} ] }
put /movie_index/movie/3 { "id":3, "name":"incident red sea", "doubanscore":5.0, "actorlist":[ {"id":4,"name":"zhang chen"} ] } |
如果之前没建过index或者type,es 会自动创建。
直接用id查找
get movie_index/movie/1 |
修改**—**整体替换
和新增没有区别
put /movie_index/movie/3 { "id":"3", "name":"incident red sea", "doubanscore":"5.0", "actorlist":[ {"id":"1","name":"zhang chen"} ] } |
修改**—某个字段******
post movie_index/movie/3/_update { "doc": { "doubanscore":"7.0" } } |
修改**—某个字段和**** 修改****—**整体替换二者选一,否则:
删除一个document
delete movie_index/movie/3 |
{
“found”: true,
“_index”: “movie_index”,
“_type”: “movie”,
“_id”: “3”,
“_version”: 18,
“result”: “deleted”,
“_shards”: {
“total”: 2,
“successful”: 1,
“failed”: 0
}
}
搜索type全部数据
get movie_index/movie/_search |
结果
{ "took": 2, //耗费时间 毫秒 "timed_out": false, //是否超时 "_shards": { "total": 5, //发送给全部5个分片 "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, //命中3条数据 "max_score": 1, //最大评分 "hits": [ // 结果 { "_index": "movie_index", "_type": "movie", "_id": 2, "_score": 1, "_source": { "id": "2", "name": "operation meigong river", "doubanscore": 8.0, "actorlist": [ { "id": "1", "name": "zhang han yu" } ] } 。。。。。。。。 。。。。。。。。 } |
按条件查询(全部)
get movie_index/movie/_search { "query":{ "match_all": {} } } |
按分词查询
get movie_index/movie/_search { "query":{ "match": {"name":"red"} } } |
注意结果的评分
按分词子属性查询
get movie_index/movie/_search { "query":{ "match": {"actorlist.name":"zhang"} } } |
结果:
{
“took”: 2,
“timed_out”: false,
“_shards”: {
“total”: 5,
“successful”: 5,
“skipped”: 0,
“failed”: 0
},
“hits”: {
“total”: 2,
“max_score”: 1,
“hits”: [
{
“_index”: “movie_index”,
“_type”: “movie”,
“_id”: “2”,
“_score”: 1,
“_source”: {
“id”: 2,
“name”: “operation meigong river”,
“doubanscore”: 8,
“actorlist”: [
{
“id”: 3,
“name”: “zhang han yu”
}
]
}
},
{
“_index”: “movie_index”,
“_type”: “movie”,
“_id”: “1”,
“_score”: 1,
“_source”: {
“id”: 1,
“name”: “operation red sea”,
“doubanscore”: 8.5,
“actorlist”: [
{
“id”: 1,
“name”: “zhang yi”
},
{
“id”: 2,
“name”: “hai qing”
},
{
“id”: 3,
“name”: “zhang han yu”
}
]
}
}
]
}
}
match phrase
get movie_index/movie/_search { "query":{ "match_phrase": {"name":"operation red"} } } |
按短语查询,不再利用分词技术,直接用短语在原始数据中匹配
我就不发结果了,太长的博客也不好看。
fuzzy查询
get movie_index/movie/_search { "query":{ "fuzzy": {"name":"rad"} } } |
校正匹配分词,当一个单词都无法准确匹配,es通过一种算法对非常接近的单词也给与一定的评分,能够查询出来,但是消耗更多的性能。
过滤–查询后过滤
get movie_index/movie/_search { "query":{ "match": {"name":"red"} }, "post_filter":{ "term": { "actorlist.id": 3 } } } |
先查询后过滤效率慢,好比,我先从全国所有人中先过滤其他省份的留下广东的,再查询比先查询全国所有人再过滤广东的
过滤–查询前过滤(推荐)
get movie_index/movie/_search { "query":{ "bool":{ "filter":[ {"term": { "actorlist.id": "1" }}, {"term": { "actorlist.id": "3" }} ], "must":{"match":{"name":"red"}} } } } |
过滤–按范围过滤
get movie_index/movie/_search { "query": { "bool": { "filter": { "range": { "doubanscore": {"gte": 8} } } } } } |
关于范围操作符:
gt | 大于 |
lt | 小于 |
gte | 大于等于 |
lte | 小于等于 |
排序
get movie_index/movie/_search { "query":{ "match": {"name":"red sea"} } , "sort": [ { "doubanscore": { "order": "desc" } } ] } |
这个先按名称后按red sea排序
分页查询
get movie_index/movie/_search { "query": { "match_all": {} }, "from": 1, "size": 1 } |
指定查询的字段
get movie_index/movie/_search { "query": { "match_all": {} }, "_source": ["name", "doubanscore"] } |
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。
深知大多数初中级java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!

文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份pdf文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大java架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的redis、mysql、jvm、kafka、微服务、spring全家桶等学习笔记这里就不一一列举出来
ommunity.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份pdf文档
- 第一个要分享给大家的就是算法和数据结构
[外链图片转存中…(img-hleiipkd-1711492042847)]
- 第二个就是数据库的高频知识点与性能优化
[外链图片转存中…(img-5s8qwhp2-1711492042847)]
- 第三个则是并发编程(72个知识点学习)
[外链图片转存中…(img-kvilixyp-1711492042847)]
- 最后一个是各大java架构专题的面试点+解析+我的一些学习的书籍资料
[外链图片转存中…(img-heictwni-1711492042847)]
还有更多的redis、mysql、jvm、kafka、微服务、spring全家桶等学习笔记这里就不一一列举出来
需要更多java资料的小伙伴可以帮忙点赞+关注,,即可免费领取!
发表评论