Elasticsearch核心讲解

文档

文档就是索引中的数据,以JSON形式存储,可以是复杂的结构。

一个文档不仅有数据,还包含了元数据(metadata),三个必须的元数据节点是:

节点说明
_index文档存储的地方
_type文档代表的对象的类
_id

文档的唯一标识

_index

类似关系型数据库中的数据库,是存储和索引关联数据的地方

事实上,我们的数据存储在索引的分片中,index只是一个或者多个分片组合的逻辑空间,但是对于我们程序而言,不需要关注分片,就任务数据存储在索引中即可。

 _type

可以看做关系型数据库中的表,一个索引可以存储多个表,但是es6以后,去掉了type的概念,默认一个索引只存储一种类型的数据,所以索引也可以看做一个表了

 _id

数据的唯一标识符,如果不指定,es会自动生成32位的随机字符串

查询响应

pretty

除了使用elasticsearch-head插件,postman等工具,我们还可以直接在网页上请求es数据,但是展示结果不太友好。

可以添加一个pretty参数来友好展示数据

 指定响应数据

添加_source参数

 也可以在请求地址后直接添加/_source/id,只请求数据,不返回索引元数据

也可以再追加_source参数,按需返回字段

 判断文档是否存在

get请求中,如果文档不存在,found参数返回false

 也可以使用head请求

如果文档不存在,则状态码为404,文档存在状态码为200

批量操作

 批量查询,插入、修改、删除等

 _bulk操作

请求格式

{"action":{ metadata }}\n
{request body }\n
{"action":{ metadata }}\n
{request body }\n
{"action":{ metadata }}\n
{request body }\n
#注意 最后一行的回车不能丢

示例:批量插入

{"create":{"_index":"my_test_index"}}
{"id":2001,"name":"name1","age":12}
{"create":{"_index":"my_test_index"}}
{"id":2002,"name":"name2","age":20}
{"create":{"_index":"my_test_index"}}
{"id":2003,"name":"name3","age":24}

批量删除:

{"delete":{"_index":"my_test_index","_id":"swQszIEBNosuSpkicpe-"}}
{"delete":{"_index":"my_test_index","_id":"tgQPzYEBNosuSpkiCpcS"}}
{"delete":{"_index":"my_test_index","_id":"twQPzYEBNosuSpkiCpcS"}}

分页

es接受两个分页参数,类似mysql中的limit

size:结果数,默认是10
form:跳过开始的结果数,默认是0

GET {索引}/_search?size=2&from=1

 深度分页:es是基于分片的,假设有5个分片,from=100,size=10。则会根据排序规则从5个分片中各取回100+10条数据数据,然后汇总成550条数据后选择最后面的10条数据。越往后的分页,执行的效率越低。

ES为了避免深分页,默认不允许查询10000条以后的数据。

映射

前面我们插入es数据,都是由es自动判断类型,但有时候需要我们明确字段类型,否则自动判断的类型和实际需求是不相符的。

自动判断的规则如下:

JSON中的数据判断类型ES类型
true /falsebooleanboolean
123longbyte、short、integer、long
123.45doublefloat、double
2022-07-05datedate
"字符串及其他类型"stringstring、text、keyword


 

结构化查询 

term

terms

range

exists

match

bool

过滤查询

filter

查询语句要比过滤语句更耗时,不仅要查询匹配的文档还要计算文档的相关性,并且查询结果不可缓存,做精确匹配搜索时,最好用过滤语句,因为过滤语句可以缓存数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值