第101集 基础篇的一个总结,
建议都可以看看,总结的很好
第102 ES简介
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。
第103集 docker安装ES
我这里是在windows环境下载的,参考这篇文档
Windows下载安装并启动 Elasticsearch(ES)_es window 下载启动-CSDN博客
第104集 docker安装可视化(可不装)
第106集 新增内容
1
、
_cat
GET /_cat/nodes
:查看所有节点
GET /_cat/health
:查看
es
健康状况
GET /_cat/master
:查看主节点
GET /_cat/indices
:查看所有索引
show databases;
2
、索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识。
PUT
和
POST
都可以,
POST 代表
新增。如果不指定
id
,会自动生成
id
。指定
id
就会修改这个数据,并新增版本号
PUT
可以新增可以修改。
PUT
必须指定
id
;由于
PUT
需要指定
id
,我们一般都用来做修改
操作,不指定
id
会报错。
PUT customer/external/1
;代表在
customer
索引下的
external
类型下保存
1
号数据
{
"name": "John Doe"
}
第107集 查询文档
GET customer/external/1
结果:
{ "_index": "customer", //在哪个索引
"_type": "external", //在哪个类型
"_id": "1", //记录 id
"_version": 2, //版本号
"_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
"found": true, "_source": { //真正的内容
"name": "John Doe"
}
}
这里有讲一个并发场景,A,B同时要改同一条数据,修改的内容不同
{
"name": "a"
}
{
"name": "b"
}
如果A先修改了,那么B就无法修改,因为ES中有乐观锁机制。
第108集 更新文档
POST customer/external/1/_update
{
"doc":{ "name": "John Doew"
}
}
或者
POST customer/external/1
{
"name": "John Doe2"
}
或者
PUT customer/external/1
{
"name": "John Doe"
}
总结:第一种带_update 对比元数据,如果一样就不进行任何操作,文档 version 不增加,否者更新。下面两种方式,POST,PUT 操作总会将数据重新保存并增加 version 版本,就相当于无脑新增;
看场景; 对于大并发更新,不带 update; 对于大并发查询偶尔更新,带 update;
第109集 删除文档或者索引
删除文档:DELETE customer/external/1
删除索引:DELETE customer
第110集 两种查询方式
我们主要用这种方式
GET bank/_search
{
"query": { "match_all": {}
},
"sort": [
{
"account_number": {
"order": "desc"
}
}
]
}
第111集 ES的基本语法 GET bank/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 5,
"sort": [
{
"account_number": {
"order": "desc"
}
}
]
}
部分内容查询 GET bank/_search "_source": ["age","balance"]相当于select age,balance
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 5,
"_source": [
"age",
"balance"
]
}
第112集 match【匹配查询】
基本类型(非字符串),精确匹配 相当于 select * from xx where account_number =20; 并给出相关性得分
{
"query": {
"match": {
"account_number": "20"
}
}
}
字符串,全文检索 select * from xx where address like '%mill%';并给出相关性得分
{
"query": {
"match": {
"address": "mill"
}
}
}
字符串,多个单词(分词+全文检索) select * from xx where address like '%mill%' or
like '%road%' or
'%mill road%';
并给出相关性得分
{
"query": {
"match": {
"address": "mill road"
}
}
}
第113集 match_phrase【短语匹配】
GET bank/_search 将需要匹配的值当成一个整体单词(不分词)进行检索
{
"query": {
"match_phrase": {
"address": "mill road"
}
}
}
第114集 multi_match【多字段匹配】
GET bank/_search 相当于 select * from xx where address like '%mill%' or
state like '%mill%' ;
{
"query": {
"multi_match": {
"query": "mill",
"fields": [
"state",
"address"
]
}
}
}
第115集 bool【复合查询】
bool
用来做复合查询:
复合语句可以合并 任何 其它查询语句,包括复合语句,了解这一点是很重要的。这就意味
着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑
must
:必须达到
must 列举的所有条件
GET bank/_search 相当于 select * from xx where address like '%mill%' and
gender like '%M%' ;
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"match": {
"gender": "M"
}
}
]
}
}
}
must_not
必须不是指定的情况
address
包含
mill
,并且
gender
是
M
,如果
address
里面有
lane
最好不过,但是
email
必
须不包含
baluba.com
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"match": {
"gender": "M"
}
}
],
"should": [
{
"match": {
"address": "lane"
}
}
],
"must_not": [
{
"match": {
"email": "baluba.com"
}
}
]
}
}
}
第116章 filter【结果过滤】
并不是所有的查询都需要产生相关性得分,特别是那些仅用于
“
filtering
”
(过滤)的文档。为了不
计算分数
Elasticsearch
会自动检查场景并且优化查询的执行。
这里相当于与balance在大于10000,小于20000的范围内。
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
}
],
"filter": {
"range": {
"balance": {
"gte": 10000,
"lte": 20000
}
}
}
}
}
}
第117章 term
和 match 一样。匹配某个属性的值。全文检索字段用 match,其他非 text 字段匹配用 term。
{
"query": {
"bool": {
"must": [
{
"term": {
"age": {
"value": "28"
}
}
},
{
"match": {
"address": "990 Mill Road"
}
}
]
}
}
}
第118章 ES分析 aggregations(执行聚合)
聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于
SQL GROUP
BY
和
SQL
聚合函数。在
Elasticsearch
中,您有执行搜索返回
hits
(命中结果),并且同时返
回聚合结果,把一个响应中的所有
hits
(命中结果)分隔开的能力。这是非常强大且有效的,
您可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用
一次简洁和简化的
API
来避免网络往返。
举例:
搜索
address
中包含
mill
的所有人的年龄分布以及平均年龄,但不显示这些人的详情。
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"group_by_state": {
"terms": {
"field": "age"
}
},
"avg_age": {
"avg": {
"field": "age"
}
}
},
"size": 0
}
按照年龄聚合,并且请求这些年龄段的这些人的平均薪资
GET bank/account/_search
{
"query": {
"match_all": {
}
},
"aggs": {
"age_avg": {
"terms": {
"field": "age",
"size": 1000
},
"aggs": {
"banlances_avg": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 1000
}
查出所有年龄分布,并且这些年龄段中
M
的平均薪资和
F
的平均薪资以及这个年龄
段的总体平均薪资
{
"query": {
"match_all": {
}
},
"aggs": {
"age_agg": {
"terms": {
"field": "age",
"size": 100
},
"aggs": {
"gender_agg": {
"terms": {
"field": "gender.keyword",
"size": 100
},
"aggs": {
"balance_avg": {
"avg": {
"field": "balance"
}
}
}
},
"balance_avg": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 1000
}
第119集,第120集,第121集,
mapping映射 映射这里有点晕,暂时过,回头补充