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 DB ElasticSearch
数据库(database) 索引(index)
表(tables) type
行(rows) documents
字段(columns) fields

微服务技术栈

  1. 微服务技术栈架构图
    ElasticSearch工具_第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": {
	"": {
		"": {
			""
		}
		[,"meta": {[""]}]?
		[,"aggregations": {[""]+}]?
	},
	""
}
# 例: 搜索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": {
			"":{
				"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

你可能感兴趣的:(软件测试,elasticsearch,大数据,big,data)