个人笔记谷粒商城项目第五节(101集~120集)

第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映射 映射这里有点晕,暂时过,回头补充

gulimall_pms 商品 drop table if exists pms_attr; drop table if exists pms_attr_attrgroup_relation; drop table if exists pms_attr_group; drop table if exists pms_brand; drop table if exists pms_category; drop table if exists pms_category_brand_relation; drop table if exists pms_comment_replay; drop table if exists pms_product_attr_value; drop table if exists pms_sku_images; drop table if exists pms_sku_info; drop table if exists pms_sku_sale_attr_value; drop table if exists pms_spu_comment; drop table if exists pms_spu_images; drop table if exists pms_spu_info; drop table if exists pms_spu_info_desc; /*==============================================================*/ /* Table: pms_attr */ /*==============================================================*/ create table pms_attr ( attr_id bigint not null auto_increment comment '属性id', attr_name char(30) comment '属性名', search_type tinyint comment '是否需要检索[0-不需要,1-需要]', icon varchar(255) comment '属性图标', value_select char(255) comment '可选值列表[用逗号分隔]', attr_type tinyint comment '属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]', enable bigint comment '启用状态[0 - 禁用,1 - 启用]', catelog_id bigint comment '所属分类', show_desc tinyint comment '快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整', primary key (attr_id) ); alter table pms_attr comment '商品属性'; /*==============================================================*/ /* Table: pms_attr_attrgroup_relation */ /*==============================================================*/ create table pms_attr_attrgroup_relation ( id bigint not null auto_increment comment 'id', attr_id bigint comment '属性id', attr_group_id bigint comment '属性分组id', attr_sort int comment '属性组内排序', primary key (id) ); alter table pms_attr_attrgroup_relation comment '属性&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值