1、查询商品详情:缓存,因为商品详解
2、查询商品页面:ES,因为数据太多,模糊查询慢
3、商品详情页面做成html静态页面,是为了更好的被搜索引擎收录
4、ES如何与数据库实现数据同步?
5、为什么ES模糊搜索的时候,不管是商品名还是商品详情页面包括关键字的都会查出来?
分词聚合查询
6、kibana:有点像postman测试
7、PDMan:
8、ELK,logstash插件,日志收集
输入(读取本地文件或者连接数据库)
输出(json)
添加数据的时候会自动映射类型
PUT应该是修改,修改发现没有数据就自动添加
POST是添加
lucene语言
es把type移除
pansoso!!
高亮
倒排和分词的区别
网盘搜索引擎原理:采用ES存储抓取的数据、抓取服务器
日志不能存放到数据库里,数据库是放持久化的数据,日志可以放到mongdb,es,redis(过期删除)中
9、
10、
11、
12、
13、
14、
15、
16
pansoso
默认占用IGB内存
可以处理PB级别的数据,1PB=1024TB
大型分布式日志分析系统ELK:
Elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)
Elasticsearch存储结构:JSON
关系型数据库 数据库 表 行 列
ES 索引 类型 文档 字段
9300(HTTP协议):ES节点间通讯使用,http协议端口号
9200(接口形式):ES和外部通讯的端口号,192.168.212.180:9200/索引/类型/id访问ES
默认5601端口
创建索引
PUT /mymayikt
GET /mymayikt
DELETE /mymayikt
创建/修改文档(行) :version会+1,乐观锁
PUT /索引/类型/id
PUT /mymayikt/user/1?version=6
{
"name":"lh",
"age":21,
"sex":0
}
GET /mymayikt/user/1
分配默认ID
POST /mymayikt/user/
{
"name":"lh",
"age":21,
"sex":0
}
查询所有数据
GET /mymayikt/user/_search
查询映射
默认映射为long类型
String类型分为:text(分词)和keyword(不分词)
GET /mymayikt/_mapping
查询设置
GET /mymayikt/_setting
number_of_shards : 5 五主分片
number_of_replicas : 1 每个主分片有几个副分片
总共10个分片
索引的主分片数量定义完之后就不能去修改了,副的可以改,为什么?
路由算法:hash(routing 文档id)%主分片数量
主分片对应的副分片不能放在同一台节点(服务器)上
文档映射
POST /mymayikt/_mapping/user
{
"user":{
"properties":{
"age":{
"type":"integer"
},
"sex":{
"type":"integer"
},
"name":{
"type":"text",
"analyzer":"ik_smart",
},
"car":{
"type":"keyword"
}
}
}
}
根据多个ID查询
GET /mymayikt/user/_search
{
"id":["1","2"]
}
条件查询
GET /mymayikt/user/_search?q=age:21
范围查询
GET /mymayikt/user/_search?q=age[30 TO 60]
降序排列
GET /mymayikt/user/_search?q=age[30 TO 60]&sort=age:desc
分页查询
GET /mymayikt/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=2
从0行开始,两条数据
DSL语言查询:POST请求,JSON格式查询
精确查询,不会分词查询
GET mymayikt/user/_search
{
"query": {
=="term"==: {
"name": "xiaoming"
}
}
}
根据汽车名称模糊查询支持分词查询
把奥迪a61分词去查询,中文会分为单个的,英文才会连起来,国外的框架
GET /mymayikt/user/_search
{
"from": 0,
"size": 2,
"query": {
=="match"==: {
"car": "奥迪a61"
}
}
}
过滤器
GET /mymayikt/user/_search
{
"query": {
"bool": {
"must": [{
"match_all": {} #查询所有
}],
"filter": {
"range": {
"age": {
"gt": 21, #age>21
"lte": 51 #age<21
}
}
}
}
},
"from": 0,
"size": 10,
"_source": ["name", "age"]#显示的字段
}
第一步:引入ES依赖
第二步:yml配置文件和linux中指定集群名称
第三步:UserEntity,ID要为String类型
第四步:UserDao继承接口
第五步:ESController
全文检索底层采用倒排
为什么倒排索引比数据库中的B+树要快?
五个文档,传统查询是一个一个查,倒排是使用关键词
中文的分词器,词库
http://192.168.212.181:9200/_analyze
{
"analyzer": "ik_smart",
"text": "奥迪"
}
手动添加热词
ik的config目录下指定自定义词库文件
会优先匹配最长的词
比如王者荣耀,分词也是王者荣耀,不会变成王者和荣耀
主从复制
转发
配置不同的节点id,
配置相同的集群名称node.name=node-1
SpringBoot与ES整合ES要做集群,不然会报错
日志是存放在每台节点中的
Logstash:日志搬运工
1、先ES
2、LOG
3、k
每台节点都安装L,L将日志文件输出到ES中
ELK+Kafka
第一次发送sql请求的时候,修改时间参数为当前时间。
每隔一分钟判断update_time是否更新了,更新了就同步给ES
增量更新
Mysql主从复制判断数据是否更新?
L同步多张Mysql表到ES,写多个mysql.conf文件,一个文件同步一张表
一些不常改的,比如规格表,用缓存就好了,不用存到ES中
分布式基础设施和公共Common的区别