索引
索引(index)是elasticsearch对逻辑数据的逻辑存储,可以把索引看做关系型数据库中的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。ES索引可以存放在一台机器或者多台服务器上,每个索引可以有一个或者多个分片,每个分片可以有多个副本。
文档
存储在ES中的主要实体叫文档(document),相当于关系型数据库表中的一行记录。
ES和MongoDB的文档类似,都可以有不同的结构,但ES的文档中,相同的字段必须有相同的类型,文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫做多值字段,每个字段的类型,可以是文本、数值、日期等,也可以是复杂类型,比如子文档或者数组。
映射
所有文档在写进索引之前都会进行分析,如何将输入的文本分词,哪些词条会被过滤,这种行为叫做映射,一般由用户自己定义规则。
文档类型
在ES中,一个索引对象可以存储很多不同用途的对象
每个文档可以有不同的结构,不同的文档类型不能为相同的字段设置不同的类型。例如在一个索引的所有文档类型中,一个叫title的字段必须具有相同的类型。
RESTful API
在ES中,提供了功能丰富的RESTful API的操作,包括CRUD、创建索引、删除索引等操作
创建非结构化索引
在elasticsearch中创建索引时,不需要创建索引结构,即可写数据到索引中,实际上在ES底层会进行结构化操作,但此操作对用户是透明的。
#创建空索引
PUT /my_test_index
{
"settings":{
"index":{
"number_of_shards":"2", #分片数
"number_of_replicas":"0" #副本数
}
}
}
删除索引
DELETE /{索引}
在postman中删除
在elasticsearch-head中使用直接调用接口方式删除报错,应该是不能传递包体的原因,所以我们可以直接使用界面操作删除或者使用postman调用接口删除
插入数据
POST /{索引}/{类型}/{id}
#es7以后
POST /{索引}/_doc/{id}
es6以后,去掉了类型(type)的概念,统一使用_doc替代,我跟着视频学习的时候,不管是传自定义type还是doc都各种报错:
最后偶然发现原来是_doc,终于插入数据成功:
这是不指定id的写法。如果指定id,则在地址后添加/id
指定id:
更新数据
PUT /{索引}/_doc/{id}
查看更新结果:
上述更新是全局更新,但是通常我们采用局部更新的方式
#我用的是es8 其他版本的es尤其是es6之前的请求方式会略有不同
POST /{索引}/_update/{id}/
删除数据
DELETE /{索引}/_doc/{id}/
查询数据
GET /{索引}/_doc/{id}/
查询全部数据
GET /{索引}/_search
搜索数据
GET /{索引}/_search?q=age:20
DSL搜索
es提供的一种丰富灵活的DSL查询,DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
POST /{索引}/_search
#请求体
{
"query":{
"match":{ #match只是查询的一种
"age":20
}
}
}
高亮显示
聚合
类似mysql中的group by
例:按照age分组
doc_count:分组下的数量