利用PostMan和Kibanan操作ElasticSearch和个人理解

目录

PostMan操作

常用命令

 创建索引

 查看索引index

 删除索引index

 关闭索引index

 打开索引index

 创建索引index并且进行映射mapping

Kibanan操作

创建索引

 查询索引

 删除索引

 查询映射

添加映射

创建索引并添加映射

 索引库中添加字段

操作文档document【kibana演示】

 添加文档,指定id

查询文档

 添加文档,不指定id

 查询文档

 查询文档

 查询所有文档

 删除文档

 修改文档 根据id,id存在就是修改,id不存在就是添加

查询全部

全文查询-match查询

 查询文档-term查询

关键字搜索数据

DSL 查询

① 根据年龄查询

② 查询年龄大于20岁的女性用户相应结果:

③ 全文搜索

 高亮显示

聚合

指定响应字段

判断文档是否存在

批量操作

批量查询

批量插入数据:

批量删除:

分页

terms查询

range查询

 exists 查询


整理尚硅谷ES笔记

PostMan操作

常用命令

 创建索引

PUT  http://localhost:9200/index

 elasticsearch-head查看:请求localhost:9200

 

 如果重复创建索引,会报错:

 查看索引index

GET http://localhost:9200/blog

 

 删除索引index

Delete http://localhost:9200/blog

 关闭索引index

POST    http://localhost:9200/blog/_close

 

 打开索引index

POST http://localhost:9200/blog/_open

 

 

 创建索引index并且进行映射mapping

PUT http://localhost:9200/blog1

 elasticsearch-head查看:

Kibanan操作

开启Kibanan

创建索引

PUT person

 查询索引

GET person

 删除索引

DELETE person

 查询映射

GET person/_mapping

添加映射

PUT person/_mapping
{
  "properties":{
    "name":{
      "type":"keyword"
    },
    "age":{
      "type":"integer"
    }
  }
}

创建索引并添加映射

PUT person
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword"
      },
      "age":{
        "type":"integer"
      }
    }
  }
}

 索引库中添加字段

PUT person/_mapping
{
  "properties":{
    "address":{
      "type":"text"
    }
  }
}

操作文档documentkibana演示

• 添加文档
• 查询文档
• 修改文档
• 删除文档

# 查询索引

GET person

 添加文档,指定id

PUT person/_doc/1
{
  "name":"张三",
  "age":20,
  "address":"深圳宝安区"
}

查询文档

GET person/_doc/1

 添加文档,不指定id

POST person/_doc/
{
  "name":"李四",
  "age":20,
  "address":"深圳南山区"
}

 查询文档

GET person/_doc/u8b2QHUBCR3n8iTZ8-Vk

# 添加文档,不指定id

POST person/_doc/
{
  "name":"李四",
  "age":20,
  "address":"深圳南山区"
}

 查询文档

GET person/_doc/u8b2QHUBCR3n8iTZ8-Vk

 查询所有文档

GET person/_search

 删除文档

DELETE person/_doc/1

 修改文档 根据id,id存在就是修改,id不存在就是添加

PUT person/_doc/2
{
  "name":"硅谷",
  "age":20,
  "address":"深圳福田保税区"
}

查询全部

GET  person/_search

全文查询-match查询

全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集(个人理解:会对查询的字符串分词,然后对比倒排索引)

# match 先会对查询的字符串进行分词,在查询,求交集

GET person/_search
{
  "query": {
    "match": {
      "address": "深圳保税区"
    }
  }
}

 查询文档-term查询

词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时才匹配搜索(不会对查询字符串分词,只有相同的时候才匹配搜索)

# 查询 带某词条的数据

GET person/_search
{
  "query": {
    "term": {
      "address": {
        "value": "深圳南山区"
      }
    }
  }
}

貌似也可以这样写

GET /persion/_search
{
  "query": {
    "term": {
      "address": "广"
    }
  }
}

截图:

这个结果与使用的分词器有关。根据address字段,建立倒排索引时,需要对其分词,产生多个词条,而词条集合中没有"深圳南山区"的词条,故而查询不到数据。

大家可以查询“深”或“南山区”或“深圳”试试。

关键字搜索数据

# 查询名字等于张三的用户

GET  person/_search?q=name:张三

DSL 查询

url地址请求体,多添加几条数据,方便做查询

PUT  shangguigu/_doc/1001
{
	"id":"1001",
	"name":"张三",
	"age":20,
	"sex":"男"
}

PUT  shangguigu/_doc/1002
{
	"id":"1002",
	"name":"李四",
	"age":25,
	"sex":"女"
}

PUT  shangguigu/_doc/1003
{
	"id":"1003",
	"name":"王五",
	"age":30,
	"sex":"女"
}

PUT  shangguigu/_doc/1004
{
	"id":"1004",
	"name":"赵六",
	"age":30,
	"sex":"男"
}

添加结果:

 根据年龄查询

POST  shangguigu/_doc/_search
{
  "query":{
      "match":{
          "age":20
      }
  }
}

请求结果:

② 查询年龄大于20岁的女性用户相应结果:

GET  shangguigu/_search
{
  "query":{
    "bool":{
      "filter":{
        "range":{
          "age":{
            "gt":20
          }
        }
      },
      "must":{
        "match":{
          "sex":"女"
        }
      }
    }
  }
}

相应结果:

 全文搜索

请求URL地址

GET  shangguigu/_search
{
    "query":{
       "match":{
           "name": "张三 李四"
       }
    }
}

响应数据

 高亮显示

请求URL地址

请求体

GET  shangguigu/_search
{
    "query":{
       "match":{
           "name": "张三 李四"
       }
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}

聚合

在Elasticsearch中,支持聚合操作,类似SQL中的group by操作。

请求URL地址

请求体

GET  shangguigu/_search
{
    "aggs": {
        "all_interests": {
            "terms": {
                "field": "age"
            }
         }
    }
}

响应体

如果聚合查询报错:

修改下查询语句

{
    "aggs": {
        "all_interests": {
            "terms": {
                "field": "age.keyword"
            }
         }
    }
}

指定响应字段

在响应的数据中,如果我们不需要全部的字段,可以指定某些需要的字段进行返回

GET  shangguigu/_doc/1001?_source=id,name

等价于

GET /shangguigu/_search
{
  "query": {
    "match": {
      "id": "1001"
    }
  },
  "_source": ["id","name"]
}

判断文档是否存在

如果我们只需要判断文档是否存在,而不是查询文档内容,那么可以这样:

HEAD  /shangguigu/_doc/1001

存在返回200 - OK

不存在返回404 – Not Found

批量操作

有些情况下可以通过批量操作以减少网络请求。如:批量查询、批量插入数据。

批量查询

请求体

POST  shangguigu/_doc/_mget
{
  "ids" : [ "1001", "1003" ]
}

响应

如果,某一条数据不存在,不影响整体响应,需要通过found的值进行判断是否查询到数据。

请求体:

{

  "ids" : [ "1001", "1006" ]

}

 _bulk操作

在Elasticsearch中,支持批量的插入、修改、删除操作,都是通过_bulk的api完成的。
请求格式如下:(请求格式不同寻常)

{ action: { metadata }}\n

{ request body    }\n

{ action: { metadata }}\n

{ request body    }\n

...

批量插入数据:

POST _bulk
{"create":{"_index":"atguigu","_id":2001}}
{"id":2001,"name":"name1","age": 20,"sex": "男"}
{"create":{"_index":"atguigu","_id":2002}}
{"id":2002,"name":"name2","age": 20,"sex": "男"}
{"create":{"_index":"atguigu","_id":2003}}
{"id":2003,"name":"name3","age": 20,"sex": "男"}

批量删除:

POST _bulk
{"delete":{"_index":"atguigu","_id":2001}}
{"delete":{"_index":"atguigu","_id":2002}}
{"delete":{"_index":"atguigu","_id":2003}}

由于delete没有请求体,所以,action的下一行直接就是下一个action。

分页

SQL使用 LIMIT 关键字返回只有一页的结果一样,Elasticsearch接受 from 和 size 参数:

size: 结果数,默认10

from: 跳过开始的结果数,默认0

如果你想每页显示5个结果,页码从1到3,那请求如下:

GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10

请求路径

GET shangguigu/_search?size=1&from=2

响应体

POST atguigu/_bulk
{"index":{"_index":"atguigu"}}
{"name":"张三","age": 20,"mail": "111@qq.com","hobby":"羽毛球、乒乓球、足球"}
{"index":{"_index":"atguigu"}}
{"name":"李四","age": 21,"mail": "222@qq.com","hobby":"羽毛球、乒乓球、足球、篮球"}
{"index":{"_index":"atguigu"}}
{"name":"王五","age": 22,"mail": "333@qq.com","hobby":"羽毛球、篮球、游泳、听音乐"}
{"index":{"_index":"atguigu"}}
{"name":"赵六","age": 23,"mail": "444@qq.com","hobby":"跑步、游泳"}
{"index":{"_index":"atguigu"}}
{"name":"孙七","age": 24,"mail": "555@qq.com","hobby":"听音乐、看电影"}

测试搜索:

POST atguigu/_search
{
  "query" : {
    "match" : { 
      "hobby" : "音乐 羽毛球"
    }
  },
  "from": 0,
  "size": 2
}

terms查询

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:

POST atguigu/_search
{
  "query" : {
      "terms" : { 
          "age" : [20,21]
    }
  }
}

range查询

range 过滤允许我们按照指定范围查找一批数据:

范围操作符包含:

gt :: 大于

gte :: 大于等于

lt :: 小于

lte :: 小于等于

POST atguigu/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 22
      }
    }
  }
}

 exists 查询

exists 查询可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的 IS_NULL 条件

# "exists":  必须包含
POST atguigu/_search
{
  "query": {
    "exists": { 
      "field": "mail"
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV工程湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值