ElasticSearch工具

ElasticSearch工具

1. 介绍

  1. elasticsearch分布式全文搜索引擎,的主要功能是搜索(全文搜索、结构化搜索、分析)、数据清洗,安装工具时最低要求为JDK1.8,可以处理PB级数据;
  2. ELK
    (1)Elasticsearch、Logstash、Kibana三大开源框架的缩写;
    (2)收集清洗数据 -> 搜索存储数据 -> Kibana前端页面;
    (3)默认端口:ES:9200 Kibana:5601;
    (4)面向文档;
  3. ElasticSearch与Relational DB的对比
Relational DBElasticSearch
数据库(database)索引(index)
表(tables)type
行(rows)documents
字段(columns)fields

微服务技术栈

  1. 微服务技术栈架构图
    在这里插入图片描述
  2. 五大技术栈
    (1)微服务治理
             ① 注册发现
             ② 远程调用
             ③ 负载均衡
             ④ 配置管理
             ⑤ 网关路由
             ⑥ 流量控制
             ⑦ 系统保护
             ⑧ 服务授权
             ⑨ 熔断降级
             ⑩ 分布式任务
             ⑪ TCC模型
             ⑫ AT模型
             ⑬ Seata
    (2)异步通信技术
             ① MQ消息类型
             ② SpringAMQP
             ③ 消息堆积问题
             ④ 消息可靠性
             ⑤ 仲裁队列
             ⑥ 延迟队列
             ⑦ 镜像集群
             ⑧ 数据持久化
    (3)缓存技术
             ① 缓存穿透、雪崩
             ② SringDataRedis
             ③ Redis主从复制
             ④ 缓存数据同步
             ⑤ OpenResty
             ⑥ 缓存数据同步
             ⑦ Nginx本地缓存
             ⑧ Redis持久化
             ⑨ 多级缓存分层
             ⑩ Redis分布集群
             ⑪ Lua脚本
             ⑫ Redis数据结构
    (4)DevOps
             ① Dockerfile
             ② DockerCompose
             ③ GrayLog
             ④ Jenkins
             ⑤ skywalking
             ⑥ Docker
             ⑦ K8S
    (5)搜索技术
             ① DSL语句
             ② ES集群
             ③ RestAPI
             ④ 集群脑裂
             ⑤ 竞价排名
             ⑥ 聚合统计
             ⑦ 自动补全
             ⑧ 地理坐标
             ⑨ 拼音分词

ES检索基本使用

1. 全文检索命令

  1. http://{ip}:9200/_cat/master

2. 查看索引命令

  1. _cat/indices(相当于sql中show database; 命令)

3. 保存数据

  1. PUT customer/external/1 {“name”: “json”}
    解释: 在customer索引下,external类型下保存id = 1的数据为{“name”: “json”}
  2. PUT 带id
    第一次为保存该条数据, 多次发送该请求为更新该数据
  3. POST请求
    (1)带id 第一次为新增该数据, 多次发送请求为更新该数据
    (2)不带id 新增操作,永远新增

4. 查询数据

  1. GET请求
  2. 乐观锁修改
    (1)字段:_seq_no:并发控制字段,每次更新数值加一
    (2)primary_term: 功能同上, 主分片重新分配, 如重启, 字段值就会发生变化
    (3)更新数据携带:?if_seq_no = 0 & if_primary_term = 1

5. 更新文档

  1. POST/PUT customer/extenal/1/_update {“doc”: {" "}}
    – 如果携带_update字段, 如果更新数据和原始数据一样, 则不作任何操作
    – 如果吧不携带_update字段, 更新数据时会不断进行更新, 不会对比原始数据

6. 删除文档

DELETE

  1. 删除某一条数据: DELETE customer/extenal/1
  2. 删除索引: DELETE customer

7. 批量导入API

注: 请求体必须换行
_bluk
POST http://{ip}:9200/customer/extenal/_bluk
{“操作”: “id”: “1”}
{“请求体”: " "}
例1:

{"index":{"id": "1"}}
{"name": "John"}

例2:

POST _bluk
# 删除语句
{"delete": {"index":"web", "_type": "blog", "id": "123"}}

# 创建语句
{"create": {"index":"web", "_type": "blog", "id": "123"}
{"title": "hello"}}

# 查询语句
{"index":{"index":"web", "_type": "blog", "id": "123"}
{"title": "hello"}}

# 更新语句
{"update": {"index":"web", "_type": "blog", "id": "123"}
{"doc": {"title": "hello"}}} 

8. SearchAPI全文检索

_search

# url+检索参数
GET bank/_search?q=*&sort=account_number: asc

# url+请求体
GET bank/_search
{"query":{"match":{}}},
"sort":[
{"account_number":"asc"}
]

9. ES检索基本方式

① REST request URL (url+检索参数)
②REST request body (url+请求体)
“_source”: ["…", “…”] 返回指定字段

  1. match匹配查询 (精确查询, 模糊匹配)
    – 全文检索, 按照选文进行匹配
  2. match_pharse 短语匹配
  3. multi_match 多字段匹配
"multi_match": {"query": "......",
"fileds": ["adress": "......"]}

匹配字段包含fileds, query中所有字段

10. bool符合查询

# 必须
"must": {"match":{
"gender": "F"
}},
"match": {{}}
# 必须不匹配
"must_not": {}

# 应该
"should": {}

11. filter结果过滤

不会计算相关性得分

12. term查询

注: keyword 精确值查询
如果查询的为非文本字段, 通常使用term
如果查询的是文本字段, 通常使用match

13. es执行集合aggregations

数组分组和提取数据的功能
相当于mysql中的GROUP_BY和SQL聚合

# 聚合语句
"aggregations": {
	"<aggregations_name>": {
		"<aggregations_type>": {
			"<aggregations_body>"
		}
		[,"meta": {["<meta_body>"]}]?
		[,"aggregations": {["<sub_aggregation>"]+}]?
	},
	"<aggregations_name2>"
}
# 例: 搜索address中包含mail的所有人的年龄分布以及平均年龄
GET bank/_search
{	
	"query": {
		"match": {
			"address": "mail"
		}
	},
	"aggs": {
		"aggAgg": {
			"terms": {
				"filed": "age",
				"size": 10
			}
		},
		"aggavg": {
			"avg": {
				"filed": "avg"
			}
		}
	}
}

Mapping映射

    用来定义一个文档以及他所包含的属性filed是如何存储和索引的;

  1. 哪些字符串属性应该被看做全文本属性(full text fields)
  2. 哪些属性包含数字, 日期和地理位置
  3. 文档中所有属性是否都可以被索引(_all配置)
  4. 日期格式
  5. 自定义映射规则来执行动态添加属性

1. 创建mapping

PUT /my_index
{"mappings":{
	"properties":{
		"age": {"type": "interger"}
		"email": {"type": "keyword"}
	}
}}

2. 增加mapping

PUT /my_index/_mapping
{
	"mappings": {
		"properties": {
			"<mapping_name>":{
				"type": "keyword",
				"index": False    # index为True可以被检索,为False不能被检索
			}
		}
	}
}

3. 修改映射&数据迁移

  1. 创建新索引
  2. 数据迁移
# 将老数据迁移到指定位置
POST _reindex
{
	"_source":{
		"index": "twitter"
	},
	"dest": {
		"index": "new_twitter"
	}
}

分词

一个tokenizer(分词器)将之分割成独立的token

POST _analyse
{
	"analyzer": "standard",
	"text": "<需要做分词的文本内容>"
}

分词器词库: ik

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值