elasticsearch的学习(一):使用postman实现增删改查

简介:

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,所以不能根据这个查询

相关推荐
Elastic 中国社区官方博客1 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
小黄人软件1 小时前
桌面需要整理吗?有工具自动分类
学习
老衲不用@飘柔2 小时前
SFP与SFP+学习知识整理
学习
X54先生(人文科技)2 小时前
社会嵌入式终身学习机器与修复时代-ELR架构和技术演化探讨
人工智能·深度学习·学习·架构·开源协议
电子云与长程纠缠3 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
syagain_zsx3 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼3 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
我命由我123453 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
kkkkkkkkkk_Z4 小时前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
Rabitebla4 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法