简介:
elasticsearch的基本的概念和通过postman来实现增删改查
elasticsearch
一个分布式的,restful风格的搜索和数据分析引擎,可以近乎实时的存储,检索数据,具有高扩展性,可以扩展到上百台服务器,处理bp级数据。
elasticsearch和kibana,beats,logstash一起组成elastic static,能够安全可靠的获取任何来源,任何格式的数据,然后实时的对数据进行搜索,分析,可视化。
相关概念
restful风格:特定互联网软件的架构原则,rest是资源状态转换。
uri是统一资源路径,是资源识别符,url是uri的子集,多了一个定位功能。
restful是要请求遵从统一的接口原则,同一个资源使用相同的接口进行访问,使用不同的请求方式对资源的操作
请求方式有:post提交,get查询,put更新,delete删除。不过处于安全的考虑,现在一般只使用get和post请求了。
json:JavaScript object notation的缩写,特殊标记的JavaScript对象,elasticsearch发送请求和返回的响应是json格式的。
json的格式:
bash
#可嵌套
var obj = {"name":"christ","age":27,"info":{"hobby1":"sing","hobby2":"jump"}}
#数组
var obj2 = [obj]
json字符串:网络中传递的字符串的格式符合json格式。
下载安装
官网下载:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0
点击bin目录下的elasticsearch.bat启动
会占用两个端口,9300是对内的,9200是对外的。
浏览器访问:http://localhost:9200/,显示了如下内容,表示安装启动成功
数据格式
elasticsearch是面向文档型的数据库,一条数据就是一个文档
使用elasticsearch和mysql对比:
elasticsearch | mysql |
---|---|
索引 | 数据库 |
类型 | 表 |
文档 | 行 |
字段 | 列 |
类型在版本7以上已经没有使用了。
索引的操作
创建索引
使用postman访问elasticsearch。
发送put请求:http://localhost:9200/索引名
查询索引
get请求方式查询全部索引:http://localhost:9200/_cat/indices?v
get请求方式查询一个索引的具体信息:http://localhost:9200/索引名
删除索引
delete请求方式删除一个索引:http://localhost:9200/索引名
文档的操作
创建文档
使用post方式请求:http://localhost:9200/索引名/_doc/自定义id
注意:如果没有自定义id,则要使用post方式请求。
查询数据
查询一条数据
get请求:http://localhost:9200/索引/_doc/数据id
查询所有数据
get请求http://localhost:9200/索引/_search
注意:postman的body中不能有数据
条件查询
发送get请求,http://localhost:9200/索引/_search,在请求body中写条件
条件:
json
{
"query":{
"match":{
条件
}
}
}
如果请求body是:
javascript
{
"query":{
"match_all":{
}
}
}
则查询全部数据。
分页查询
请求body中:
javascript
{
"query":{
"match_all":{
}
},
"from":0,
"size":1
}
解析 :from是第几页,size是一页显示多少数据
只查询所需字段
在body中加上"_source":[所需字段]
javascript
{
"query":{
"match_all":{
}
},
"from":0,
"size":1,
"_source":["name"]
}
查询的数据排序
在body中加上"sort",指定根据什么字段,使用order来决定是升序还是降序
javascript
{
"query":{
"match_all":{
}
},
"from":0,
"size":3,
"_source":["name"],
"sort":{
"age":{
"order":"asc"
}
}
}
多条件查询
should表示符合其中一个条件,must表示同时满足所有条件。
javascript
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"jack"
}
},
{
"match":{
"name":"jhon"
}
}
]
}
}
}
全文检索
保存文字时会拆分文字保存到倒排索引中,即使是查询条件的一部分也可以查询到,如果匹配条件是"冲上去",那么只包含一个"上"或者"去"的内容也会匹配到,如果要匹配条件不拆分,就得是完全匹配
javascript
{
"query":{
"match":{
"name":"冲"
}
}
}
完全匹配
javascript
{
"query":{
"match_phrase":{
匹配条件
}
}
}
显示高亮
javascript
{
"query":{
"match":{
"name":"冲"
}
},
"highlight":{
"fields":{
"name":{}
}
}
}
聚合查询
类似于mysql中的函数,aggs表示聚合操作,"age_test"聚合结果的名字,terms表示分组,age就是分组的字段。
javascript
{
"aggs":{
"age_test":{
"terms":{
"field":"age"
}
}
}
}
如果只想看统计的数据
javascript
{
"aggs":{
"age_test":{
"terms":{
"field":"age"
}
}
},
"size":0
}
查询平均值
javascript
{
"aggs":{
"age_test":{
"avg":{
"field":"age"
}
}
},
"size":0
}
修改数据
修改分为全量修改和局部修改
全量修改
发送put请求,http://localhost:9200/索引/_doc/id
局部修改
发送post请求:http://localhost:9200/索引/_update/id
修改内容要放到doc中。
删除数据
发送delete请求:http://localhost:9200/索引/_doc/id
映射
elasticsearch中的映射就类似于mysql中的表的各种信息,如字段的长度等。
put请求创建索引:http://localhost:9200/student
put请求添加映射:http://localhost:9200/student/_mapping
javascript
{
"properties":{
"name":{
"type":"text",
"index":true
}
"age":{
"type":"keyword",
"index":true
},
"sno":{
"type":"keyword",
"index":false
}
}
}
test表示文本,是可以分词的,即查询条件只要是其中的一个分词也可以匹配。
index true表示可以索引查询的,false表示不可以索引查询
keyword表示完整匹配,不能分词,即查询条件必须完全匹配才可以
可以使用get请求:http://localhost:9200/student/_mapping
查看索引的映射
在查询的时候,sno由于不是index,所以不能根据这个查询