全文检索工具elasticsearch5.6.4教程之elasticsearch restful api(DSL)实战【CRUD操作】

笔记大纲

  • es索引index操作

    • 查看索引
    • 添加索引
    • 删除索引
  • es文档document操作

    • 新增文档
    • 根据id查询
    • 修改字段
    • 删除document
    • 搜索type<TABLE>全部数据
    • 按条件查询全部(match_all)
    • 按分词查询(match)
    • 按分词子属性查询
    • 按数组查询(match_phrase)
    • 按关键字查询
    • 按模糊(fuzzy)查询
    • 过滤–查询后过滤
    • 过滤–查询前过滤【推荐】
    • 过滤–按范围过滤(filter-range)
    • 排序(sort)
    • 分页查询(from/size)
    • 指定字段查询(_source)
    • 默认高亮(highlight-<em/>
    • 自定义高亮–粗体(<b/>)
    • 聚合(aggs-groupby_xx)
  • es类型type之mapping


es中保存的数据结构就是Json,这点我们需要注意!es数据的基本操作如下:

一、es索引index<database>操作

(1)查看索引

GET /_cat/indices?v //es 默认存在一个名为.kibana的索引

在这里插入图片描述

参数 描述
health green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status 是否能使用
index 索引名
uuid 索引统一编号
pri 主节点几个
rep 从节点几个
docs.count 文档数
docs.deleted 文档被删了多少
store.size 整体占空间大小
pri.store.size 主节点占
(2)添加索引

PUT /movie_index

在这里插入图片描述
校验

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

(3)删除索引

DELETE /movie_index //只是逻辑删除

二、es文档document<row>操作

查询用GET、创建、覆盖用PUT、修改用POST外加_update,注意细节!

(1)新增文档

新增文档就如同新增一条记录!如果没新建index或者type,es 会自动创建!

PUT /movie_index/movie/1
{ "id":1,
  "name":"operation red sea",
  "doubanScore":8.5,
  "actorList":[  
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}

PUT /movie_index/movie/2
{
  "id":2,
  "name":"operation meigong river",
  "doubanScore":8.0,
  "actorList":[  
{"id":3,"name":"zhang han yu"}
]
}

PUT /movie_index/movie/3
{
  "id":3,
  "name":"incident red sea",
  "doubanScore":5.0,
  "actorList":[  
{"id":4,"name":"zhang chen"}
]
}

在这里插入图片描述

(2)根据id查询

GET movie_index/movie/1

在这里插入图片描述

(3)修改字段

查看id为3初始数据

在这里插入图片描述

修改id为3中daoubanScore字段

POST movie_index/movie/3/_update
{ 
  "doc": {
    "doubanScore":7.0
  } 
}

在这里插入图片描述

查看id为3修改后数据

在这里插入图片描述

(4)删除document

DELETE movie_index/movie/3

(5)搜索type<TABLE>全部数据

GET movie_index/movie/_search //查询所有数据
在这里插入图片描述

(6)按条件查询全部(match_all)
GET movie_index/movie/_search
{
  "query":{
    "match_all": {}
  }
}

在这里插入图片描述

(7)按分词查询(match)
GET movie_index/movie/_search
{
  "query":{
    "match": {"name":"red"}
  }
}

在这里插入图片描述

(8)按分词子属性查询
GET movie_index/movie/_search
{
  "query":{
    "match": {"actorList.name":"zhang"}
  }
}

在这里插入图片描述

(9)按数组查询(match_phrase)

按短语查询,不再利用分词技术,直接用短语在原始数据中匹配!

GET movie_index/movie/_search
{
    "query":{
      "match_phrase": {"name":"operation red"}  //两个字段
    }
}

在这里插入图片描述

(10)按关键字查询

应用教少,搜索平台一般都是分词查询!

在这里插入图片描述

(11) 按模糊(fuzzy)查询

fuzzy只适合英文,中文查询复杂!!!

GET movie_index/movie/_search
{
    "query":{
      "fuzzy": {"name":"rad"}   //red写错成rad进行搜索
    }
}

在这里插入图片描述

(12)过滤–查询后过滤
GET movie_index/movie/_search
{
    "query":{
      "match": {"name":"red"}
    },
    "post_filter":{
      "term": {
        "actorList.id": 3
      }
    }
}
(13)过滤–查询前过滤【推荐】
GET movie_index/movie/_search
{ 
    "query":{
        "bool":{
          "filter":[ {"term": {  "actorList.id": "1"  }},
                     {"term": {  "actorList.id": "3"  }}
           ], 
           "must":{"match":{"name":"red"}}
         }
    }
}

在这里插入图片描述

(14)过滤–按范围过滤(filter-range)

gt表示大于,lt表示小于,gte表示大于等于,lte表示 小于等于

GET movie_index/movie/_search
{
   "query": {
     "bool": {
       "filter": {
         "range": {
            "doubanScore": {"gte": 8}
         }
       }
     }
   }
}

在这里插入图片描述

(15)排序(sort)

sort关键字,排序方式:desc降序、asc升序!

GET movie_index/movie/_search
{
  "query":{
    "match": {"name":"red sea"}
  }
  , "sort": [
    {
      "doubanScore": {
        "order": "desc"
      }
    }
  ]
}

在这里插入图片描述

(16)分页查询(from/size)

查询所有数据,from(索引从0开始)size(每页查询记录数1条),document有3条,应分3页。

GET movie_index/movie/_search
{
  "query": { "match_all": {} },
  "from": 0,
  "size": 1
}

在这里插入图片描述

(17)指定字段查询(_source)

相当于select id ,name from table;

GET movie_index/movie/_search
{
  "query": { "match_all": {} },
  "_source": ["name", "doubanScore"]
}

在这里插入图片描述

(18)默认高亮(highlight-<em/>
GET movie_index/movie/_search
{
    "query":{
      "match": {"name":"red sea"}
    },
    "highlight": {
      "fields": {"name":{} }
    }
}

在这里插入图片描述

(19)自定义高亮–粗体(<b/>)

在这里插入图片描述

(20)聚合(aggs-groupby_xx)

分组统计,效率比较低!

aggs设定规则;groupby_actor聚合规则名,不能重复;field表示字段;追加keyword字段

统计每个演员共参演了多少部电影

GET movie_index/movie/_search
{ 
  "aggs": {
    "groupby_actor": {
      "terms": {
        "field": "actorList.name.keyword"  
      }
    } 
  }
}

在这里插入图片描述

每个演员参演电影的平均分是多少,并按评分排序

GET movie_index/movie/_search
{ 
  "aggs": {
    "groupby_actor_id": { 
      "terms": {
        "field": "actorList.name.keyword" ,
        "order": {
          "avg_score": "desc"
          }
      },
      "aggs": {
        "avg_score":{
          "avg": {
            "field": "doubanScore"   //平均分doubanScore计算
          }
        }
       }
    } 
  }
}

在这里插入图片描述

三、es类型type<table>mapping

type中的字段的数据类型由mapping定义,没设定mapping系统会自动根据一条数据来推断数据格式;同时我们还可以手动定义,但是只能对新加的、没有数据的字段进行定义。一旦有了数据就无法再做修改了! 默认只有text会进行分词,keyword是不会分词的字符串!

数据 推算数据格式
true/false boolean
6666 long
666.6 double
“2019.11.07” date
“hello world” text +keyword
GET movie_index/_mapping/movie  //type可以看做table,查看表结构

在这里插入图片描述


 ☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!

☞本人博客:https://coding0110lin.blog.csdn.net/  欢迎转载,一起技术交流吧!

©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值