Elasticsearch 笔记


一、入门

1.1 简介

Elasticsearch 是一个分布式的免费开源搜索和分析引擎。可通过 REST API 接口来操作数据,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据,是目前全文搜索引擎的首选。mysql专注于数据的持久化存储与管理,而Elasticsearch更善于海量数据的检索与分析。

1.2 基本概念

概念解释
cluster(集群)整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。
node(节点)集群中的一个节点,一般只一个进程就是一个node。
shard(分片)分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。
Index(库)相当于mysql的database, 逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中;动词表示插入。
Type(表)类似于mysql的table,其实更像面向对象中的class , 同一Json的格式的数据集合。
Document(一条数据)类似于mysql中的某个table的一条数据(row)、面向对象里的object
Field(字段)相当于字段、属性

在这里插入图片描述

1.3 安装

docker pull elasticsearch:版本号

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-d elasticsearch:版本号


// 修改config/elasticsearch.yml
network.host: 0.0.0.0

// 修改config/jvm.options
-Xms64m
-Xmx128m

二、REST API

2.1 _cat

GET /_cat/nodes     查看所有节点
GET /_cat/health     查看es健康状态
GET /_cat/master     查看主节点
GET /_cat/indices     查看所有索引 show databases

2.2 增

索引一个文档(保存一条数据),保存在那个索引的那个类型下(保存在那个数据库的那张表下),制定用那个唯一的标识:PUT customer/external/1;在customer索引下的external类型下保存1号数据。注意es内存储的所有数据都是JSON文档。

PUT customer/external/1

PUT和POST做保存都可以
● POST新增,如果不指定id,会自动生成id,多次操作均为新增。指定id就会修改这个数据,并新增版本号;
● PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会405报错。首次操作为新增,多次操作为更新。
在这里插入图片描述

2.3 删

DELETE customer/external/1   (删除文档)

DELETE customer  (删除索引)

ES未提供删除直接删除类型的操作

2.4 改

PUT customer/external/1   (常用,不会对比原来的数据,多次重复提交未修改的数据,版本号、序列号改变)
{
	"name":"john"
}
-------------------------------
POST customer/external/1/_update  (会对比原来的数据,多次重复提交未修改的数据,版本号、序列号不变)
{
	"doc":{
		"name":"john"
	}
}
-------------------------------
POST customer/external/1 	(不会对比原来的数据,多次重复提交未修改的数据,版本号、序列号改变)
{
	"name":"john"
}

2.5 查

//查询
GET customer/external/1

//乐观锁处理并发
GET customer/external/1?if_seq_no=0&if_primary_term=1

在这里插入图片描述

_bulk 批量操作

POST /customer/external/_bulk

// 操作的数据
{"index":{"_id":"1"}}
{"name":"john"}

{"index":{"_id":"2"}}
{"name":"mack"}

// 语法格式
{action:{metadata}}\n
{request bady}\n

{action:{metadata}}\n
{request bady}\n

复杂的批量操作场景
在这里插入图片描述
在这里插入图片描述

三、进阶检索

ES支持两种基本方式检索:一种是通过使用REST request URI 发送搜索参数(URI + 检索参数); 另一种是通过使用 REST request body 来发送(URI + 请求体)。
所有的搜索都要从_search开始。

// 检索bank下所有信息,包括type和 docs
GET bank/_search 

// 请求参数方式检索
GET bank/_search?q=*&sort=account_number:asc

// 带请求体方式检索 Query DSL 风格
GET bank/_search 
{
	"query":{
		"match_all":{}
	},
	"sort":[
	{
		"account_number":"asc"
	},
	{
		"balance":"desc"
	}
	]
}

响应结果解释:

took - Elasticsearch		执行搜索的时间(毫秒)
time_out- 		告诉我们搜索是否超时
_shards-		告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片
hits-		搜索结果
hits.total-		搜索结果
hits.hits -		实际的搜索结果数组(默认为前10的文档)
sort-		结果的排序key(键)(没有则按 score 排序)
score 和 max_score-		相关性得分和最高得分(全文检索用)

3.1 Query DSL

DSL官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值