Rest风格说明
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档ID) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | Localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | Localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档ID |
POST | Localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
关于索引以及文档的基本操作
增
-
创建一个文档
PUT /索引名/--类型名--/文档id
{
请求体
}![](/Users/weihaolee/Library/Application Support/typora-user-images/截屏2021-02-26 12.54.58.png)
完成了自动增加索引 数据也成功的添加了
-
配置字段类型
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age" :{
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}
查
查看数据
POST /test3/_search
查看字段类型
GET test2
默认字段类型
- 添加数据
PUT /test3/_doc/1
{
"name": "SkyID",
"age": 21,
"birth": "2000-08-23"
}
- 查看自动分配的字段类型
如果自己的文档字段没有指定,那么es就会给我们默认配置字段类型
扩展:通过命令elastic search索引情况 通过GET _cat/ 可以获取当前es的更多信息
-
根据指定内容匹配
#根据name进行搜索(简单查询)
GET /sky/user/_search?q=name:Sky
#对于复杂条件标准写法 _source选择展示的数据 sort为排序
#from和size为分页功能
#from表示从第几个数据开始 size表示返回多少条数据(单页面数据)
GET /sky/user/_search
{
"query":{
"match": {
"name":"Sky"
}
},
"_source":["name","desc"],
"sort":[
{
"age":{
"order": "desc"
}
}
],
"from": 0,
"size": 1
} -
布尔值查询
多条件查询 must(相当于and),所有的条件都要符合
GET /sky/_search
{
"query":{
"bool": {
"must": [
{
"match": {
"name": "潭"
}
},
{
"match": {
"age": "2"
}
}
]
}
}
}多条件查询 should(相当于or),满足一个就可以
GET /sky/_search
{
"query":{
"bool": {
"should": [
{
"match": {
"name": "潭"
}
},
{
"match": {
"age": "2"
}
}
]
}
}
}多条件查询 must_not(相当于not),满足一个就可以
GET /sky/_search
{
"query":{
"bool": {
"must_not": [
{
"match": {
"name": "潭"
}
},
{
"match": {
"age": "2"
}
}
]
}
}
}过滤器 filter (gt大于、gte大于等于、lt小于、lte小于等于、eq等于)
GET /sky/_search
{
"query":{
"bool": {
"must": [
{
"match": {
"name": "潭"
}
}
],
"filter": [
{
"range": {
"age": {
"gt": 10
}
}
}
]
}
}
}多条件查询 多个条件使用空格隔开进行查询 只要满足其一便可被查出来 通过分值进行基本的判断
GET /sky/_search
{
"query":{
"match": {
"tags": "男 王"
}
}
} -
精确查询
term查询是直接通过倒排索引指定的词条进程精确查找的
关于分词:
term,直接查询精确 搭配keyword使用
match 会使用分词器解析 (先分析文档,然后在通过分析的文档进行查询)
「两个类型 text keyword」
-
创建测试文档
# 设定索引类型
PUT /testdb
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"desc": {
"type": "keyword"
}
}
}
}
# 添加两条数据用于测试
PUT /testdb/_doc/1
{
"name": "李维昊",
"desc": "我是一个程序员"
}
PUT /testdb/_doc/2
{
"name": "李维昊2",
"desc": "我是一个程序员2"
} -
查询name(text类型)
GET testdb/_search
{
"query": {
"term": {
"name": "李"
}
}
}两条信息均有返回
-
查询desc(keyword类型)
GET testdb/_search
{
"query": {
"term": {
"desc": "我是一个程序员"
}
}
}返回结果仅为一个
并且如果我们改为单字搜索发现
GET testdb/_search
{
"query": {
"term": {
"desc": "程"
}
}
}发现无返回结果
-
-
高亮查询
GET testdb/_search
{
"query": {
"match": {
"name": "李维昊"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}查看返回结果发现「李维昊」添加了标签
同样的我们可以自定义返回标签
GET testdb/_search
{
"query": {
"match": {
"name": "李维昊"
}
},
"highlight": {
"pre_tags": "<p>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}
改
在Elastic Search当中我们有可以使用两种方式进行数据修改
-
重新使用PUT值进行添加数据
首先查询文档当前内容
POST /test3/_search
使用PUT重新添加数据(将名字修改)
PUT /test3/_doc/1
{
"name": "WeiHao.L",
"age": 21,
"birth": "2000-08-23"
}执行指令,通过es返回的json信息我们可以看到其中的version版本变为了2。证明我们此索引数据进行了更新
再次使用search进行查询,更新成功
但是这种方式的缺点为如果我们忘记输入某一项的值 会出现单条记录被清空的情况(如图 name被清空)
-
使用POST方法进行update
此方法仅需将需要更新的数据进行发送请求即可
POST /test3/_doc/1/_update
{
"doc" :{
"name": "Sky"
}
}更新成功
删
DELETE test1