es实操笔记

news2024/11/30 6:49:30

Elasticsearch提供了一个非常全面和强大的REST API,可以使用它与集群进行交互。咱们来玩一下。

环境搭建

在这里插入图片描述
搭建好eskinaba,可以访问通过ip:9200查看es的信息,ip:5601打开kinaba
在这里插入图片描述

集群相关

健康检查

curl localhost:9200/_cat/health?v

在这里插入图片描述
集群的健康状态有绿色(green)、黄色(yellow),红色(red)三种:

  • 绿色:一切正常(集群功能全部可用)。
  • 黄色:所有数据都可用,但某些副本尚未分配(集群完全正常工作)。
  • 红色:由于某些原因,某些数据不可用(集群只有部分功能正常工作)。

节点列表

curl localhost:9200/_cat/nodes?v

在这里插入图片描述

可以看到一个名为442a880a3b43的节点,它是当前集群中唯一的节点。

集群的索引列表

在这里插入图片描述

  • health:索引的状态;
  • index:索引名;
  • docs.count:文档的个数;

ES数据操作

ES是面向文档的,这意味着它可以存储整个对象或文档。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤ES使用JSON作为文档序列化格式。

以kinaba的为例,索引的CURD

索引

  • 创建索引
    • 格式: PUT /索引名称
    • 举例: PUT   /es_db
  • 查询索引所有文档
    • 格式: GET /索引名称
    • 举例: GET    /es_db
  • 删除索引
    • 格式: DELETE /索引名称
    • 举例: DELETE   /es_db

添加文档

  • 格式: PUT /索引名称/类型/id

在这里插入图片描述

修改文档

  • 格式: PUT /索引名称/类型/id
    在这里插入图片描述

可以看到添加和修改的指令是一样,添加一个存在的id文档,则是修改。

删除文档

  • 格式: DELETE /索引名称/类型/id
    • 举例: DELETE /es_db/_doc/1

查询某条文档

  • 格式: GET /索引名称/类型/id
    • 举例: GET /es_db/_doc/2

查询某条文档

  • 格式: GET /索引名称/类型/id
    • 举例: GET /es_db/_doc/2

query string seach

  • 查询当前类型中的所有文档 _search类型可以写可不写
    • 格式: GET /索引名称/[/类型]/_search
    • 举例: GET /es_db/_doc/_search 相当于sqlSQL: select * from _doc
  • 条件查询, 如要查询等于22岁的 _search?q=age:22
    • 格式: GET /索引名称/[/类型]/_search?q=条件属性:值
    • GET es_db/_doc/_search?q=age:22
  • 范围查询 :如要查询age在25至26岁之间的
    • 格式: GET /索引名称[/类型]/_search?q=条件属性[值1 TO 值2] 注意: TO 必须为大写
    • 举例: GET /es_db/_doc/_search?q=age[22 TO 26]
  • 分页查询 from=*&size=*
    • 格式: GET /索引名称[/类型]/_search?q=条件属性[值1 TO 值2]&from=0&size=1
    • 举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1相当于select * from _doc where age between 22 and 26 limit 0, 1
  • 对查询结果排序 sort=字段:desc/asc
    • 格式: GET /索引名称[/类型]/_search?sort=条件属性:desc/asc
    • GET /es_db/_search?sort=age:desc
  • 对查询结果只输出某些字段 _source=字段,字段
    • 格式: GET /索引名称[/类型]/_search?_source=属性
    • GET /es_db/_search?_source=name&sort=age:desc

注意:查询的时候带上类型会出现Deprecation: [types removal] Specifying types in search requests is deprecated.es7版本将type弃用导致的。

query DSL

DSL由叶子查询子句复合查询子句两种子句组成。
在这里插入图片描述
无查询条件:无查询条件是查询所有,默认是查询所有的,或者使用match_all表示所有。

GET  /es_db/_search
{
  "query": {
    "match_all": {}
  }
}

模糊查询

主要是针对文本类型的字段,文本类型的字段会对内容进行分词,对查询时,也会对搜索条件进行分词,然后通过倒排索引查找到匹配的数据。

  • match : 通过match关键词模糊匹配条件内容
  • prefix : 前缀匹配
  • regexp : 通过正则表达式来匹配数据
#模糊查询  单字段
GET  /es_db/_search
{
  "query": {
    "match": {
      "address": "中国"
    }
  },
  "from":0,
  "size": 1,
  "_source":["name","age","sex"]
}

#查询address和name中包含caicai  多字段
GET  /es_db/_search
{
 "query":{
    "multi_match":{
      "query":"caicai",
      "fields":["address","name"]
    }
 }
}

# 前缀类型
GET  /es_db/_search
{
  "query": { 
    "prefix": {
      "name": {
        "value": "a"
      }
    }
  }
}

# match_phrase 完全匹配
GET /es_db/_search
{
  "query":{
     "match_phrase":{
        "address":"中国人"
        }
     }
 }

精确匹配

  • term : 单个条件相等
  • terms : 单个字段属于某个值数组内的值
  • range : 字段属于某个范围内的值
  • exists : 某个字段的值是否存在
  • ids : 通过ID批量查询

matchterm的区别

  • match:模糊匹配,需要指定字段名,但是输入会进行分词,比如"hello world"会进行拆分为helloworld,然后匹配,如果字段中包含hello或者world,或者都包含的结果都会被查询出来,也就是说match是一个部分匹配的模糊查询。查询条件相对来说比较宽松。
  • term: 这种查询和match在有些时候是等价的,比如我们查询单个的词hello,那么会和match查询结果一样,但是如果查询"hello world",结果就相差很大,因为这个输入不会进行分词,就是说查询的时候,是查询字段分词结果中是否有"hello world"的字样,而不是查询字段中包含"hello world"的字样。当保存
    数据"hello world"时,elasticsearch会对字段内容进行分词,"hello world"会被分成helloworld,不存在"hello world",因此这里的查询结果会为空。这也是term查询和match的区别。
## 根据sex精准匹配
GET  /es_db/_search
{
  "query": {
    "term": {
      "sex": {
        "value": "0"
      }
    }
  }
}

# 年龄10-25之间
GET  /es_db/_search
{
  "query": {
     "range": {
        "age": {
          "gte": 10,
          "lte": 25
        }
      }
  }
 
}

# 年龄name叫caicai或者admin的人
GET  /es_db/_search
{
  "query": {
       "terms": {
        "name": [
          "caicai",
          "admin"
        ]
      }
  }
}

组合条件查询

组合条件查询是将叶子条件查询语句进行组合而形成的一个完整的查询条件。

  • bool : 各条件之间有and,or或not的关系。
    • must : 各个条件都必须满足,即各条件是and的关系。
  • should : 各个条件有一个满足即可,即各条件是or的关系。
  • must_not : 不满足所有条件,即各条件是not的。
    关系
  • filter : 不计算相关度评分,它不计算_score。即相关度评分,效率更高。
    constant_score : 不计算相关度评分
    must/filter/shoud/must_not 等的子条件是通过term/terms/range/ids/exists/match等叶子条件为参数的。
# 查询地址包含中国,而且年龄在10-25之间的人
GET  /es_db/_search
{
 "query": {
   "bool": {
     "must": [
       {
         "match": {
         "address": "中国"
         }
       },
       {
        "range": {
           "age": {
             "gte": 10,
             "lte": 25
            }
         }
      }
     ]
   }
 }
}


#查询address有中国的
GET /es_db/_search
{
  "query":{
     "match":{
        "address":"中"
        }
     }
 }

##高亮 
GET /es_db/_search
{
  "query":{
    "bool":{
      "filter":{
         "match":{
         "address":"中"
        }
      }
     }
   },
   "highlight": {
     "fields": {"address": {}}
   }
 }
 

查询DSL(query DSL)和过滤DSL(filter DSL

  • query DSL:在查询上下文中,查询会回答这个问题——“这个文档匹不匹配这个查询,它的相关度高么?”如何验证匹配很好理解,如何计算相关度呢?ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。另外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。
  • filter DSL:在过滤器上下文中,查询会回答这个问题——“这个文档匹不匹配?”答案很简单,是或者不是。它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。过滤上下文 是在使用filter参数时候的执行环境,比如在bool查询中使用must_not或者filter另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。

es搜索相关参数

在这里插入图片描述

  • took:耗费的时间,单位毫秒。
  • ·time_out·:是否超时。
  • _shards:几个分片。
  • hit.total:查询结果的数量。
  • hit.max_score:匹配的分数。
  • hit.hits:具体结果

最后

实操笔记

#创建索引
PUT /es_db

# 删除索引
DELETE /es_db



# 查询索引
GET /es_db


PUT /es_db/_doc/1
{
 "name":"张三",
 "sex":1,
 "age":25,
 "address":"中国",
 "remark":"java developer"
}
# 修改id为1的数据
PUT /es_db/_doc/1
{
 "name":"caicai",
 "sex":1,
  "age":25,
  "address":"中国",
  "remark":"golang"
}

# 删除文档
DELETE /es_db/_doc/1

PUT /es_db/_doc/2
 {
 "name":"李四",
 "sex":1,
 "age":28,
 "address":"中国香港",
 "remark":"java assistant"
}

PUT /es_db/_doc/3
{
 "name":"rod",
 "sex":0,
 "age":26,
 "address":"北京",
 "remark":"php developer"
}

PUT /es_db/5
{
 "name":"admin",
 "sex":0,
 "age":22,
 "address":"长沙",
 "remark":"pythonassistant"
}

# 查询文档
GET /es_db/_doc/2

GET  es_db/_doc/_search?q=age:22
# 同上 GET  es_db/_search?q=age:22

GET /es_db/_doc/_search?q=age[22 TO 26]
# 同上 GET /es_db/_search?q=age[22 TO 26]

GET /es_db/_doc/_search?q=age[22 TO 26]&from=0&size=1
# 同上  GET /es_db/_search?q=age[22 TO 26]&from=0&size=1

GET /es_db/_search?sort=age:desc

GET /es_db/_search?_source=name&sort=age:desc

###########################################

# 索引的信息 包含字段的类型等
GET  /es_db/

# 全部
GET  /es_db/_search
{
  "query": {
    "match_all": {}
  }
}

#模糊查询  单字段
GET  /es_db/_search
{
  "query": {
    "match": {
      "address": "中国"
    }
  },
  "from":0,
  "size": 1,
  "_source":["name","age","sex"]
}

#查询address和name中包含caicai
GET  /es_db/_search
{
 "query":{
    "multi_match":{
      "query":"caicai",
      "fields":["address","name"]
    }
 }
}


# 前缀类型
GET  /es_db/_search
{
  "query": { 
    "prefix": {
      "name": {
        "value": "a"
      }
    }
  }
}

GET /es_db/_search
{
  "query":{
     "match_phrase":{
        "address":"中国人"
        }
     }
 }
 

## 根据sex精准匹配
GET  /es_db/_search
{
  "query": {
    "term": {
      "sex": {
        "value": "0"
      }
    }
  }
}

# 年龄10-25之间
GET  /es_db/_search
{
  "query": {
     "range": {
        "age": {
          "gte": 10,
          "lte": 25
        }
      }
  }
 
}

# 年龄name叫caicai或者admin的人
GET  /es_db/_search
{
  "query": {
       "terms": {
        "name": [
          "caicai",
          "admin"
        ]
      }
     
  }
}


# 查询地址包含中国,而且年龄在10-25之间的人
GET  /es_db/_search
{
 "query": {
   "bool": {
     "must": [
       {
         "match": {
         "address": "中国"
         }
       },
       {
        "range": {
           "age": {
             "gte": 10,
             "lte": 25
            }
         }
      }
     ]
   }
 }
}


GET /es_db/_search
{
  "query":{
     "match":{
        "address":"中"
        }
     }
 }
 
 ## 高亮
GET /es_db/_search
{
  "query":{
    "bool":{
      "filter":{
         "match":{
         "address":"中"
        }
      }
     }
   },
   "highlight": {
     "fields": {"address": {}}
   }
 }
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 网络之netlink 简介

文章目录前言一、Netlink用户态应用的使用1.1 Netlink socket1.2 Netlink宏操作二、Netlink对应数据结构2.1 struct sockaddr_nl2.2 struct nlmsghdr2.3 struct msghdr三、用户层实例参考资料前言 The Netlink socket family 是一个 Linux 内核接口,用于内核和用户…

网课查题接口

网课查题接口 本平台优点:免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库:题库后台http://daili.jueguangzhe.cn/ 题库后台&am…

[前端基础] CSS3 篇

CSS3 使用了层叠样式表技术,可以对网页布局、字体、颜色、背景灯效果做出控制。CSS3 作为 CSS 的进阶版,拆分和增加了盒子模型、列表模块、语言模块 、背景边框 、文字特效 、多栏布局等等。CSS3 的改变有很多,增加了文字特效,丰富…

C#基础知识

文章目录简介隐式显式转换ifswitch循环随机数方法do whilestatic递归数组foreachvar推断类型,父类二维数组,交错数组当方法参数类型确定,个数不确定时数据类型类型分类快捷方式函数参数:引用、输出参数装箱,拆箱string储存地址枚举…

Netty入门——组件(Channel)二

目录一、channel的主要作用二、EventLoop处理io任务代码示例2.1、服务端代码示例2.2、客户端代码示例2.3、服务端和客户端查看控制台输出结果三、CloseFuture关闭问题代码示例3.1、服务端代码示例3.2、客户端代码示例3.3、服务端和客户端查看控制台输出结果3.4、CloseFuture关闭…

【C++ STL】-- deque与vector相比的优势与劣势

目录 deque容器 与stack相比deque的优缺点: deque的迭代器 deque的成员函数 deque容器 deque的相关文档 deque与vector十分的相识。vector是单向开口的连续线性空间(单向扩容),deque则是一种双向开口的连续线性空间&#xff…

GIC/ITS代码分析(9)中断应用实例之IPI中断

PPI中断为外设私有中断,在ARM64上arch_timer为PPI中断。这里以arch_timer为例(代码位置drivers/clocksource/arm_arch_timer.c),作应用实例讲解。 先对ARM64通用定时器作简要介绍。通用定时器为Arm core提供标准定时器。通用定时器…

VSCode下载安装与使用教程

目录1. 打开官网进行下载安装2. 下载3. 安装4. 使用4.1 python extensions4.2 建立 python 工作区4.3 运行python代码的 3 种方法方法一:点击按钮方法二:右键菜单方法三:交互式解释器5. debug参考资料VSCode是一款免费开源的现代化轻量级代码…

【C++修炼之路】8. string类详解

每一个不曾起舞的日子都是对生命的辜负 C之string类本节目标1. string类概览1.1 string的由来1.2 string函数列表2.string常用接口1. 初始化2. string::npos3. c_str()4. 获取长度(length、size)5. 容量(size、capacity)6. 插入(insert)7. 替…

牛客网-《刷C语言百题》第三期

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:《C语言入门必刷百题》 &#x…

【HTML5期末大作业】制作一个简单HTML我的班级网页(HTML+CSS+JS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

微信小程序 |从零实现酷炫纸质翻页效果

📌个人主页:个人主页 ​🧀 推荐专栏:小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? …

保姆级透明背景动画导出 —— json格式(Mac系统)

日常能想到的小动画基本就是使用ps导出GIF动画/AE通过插件直接导出GIF,方便快捷;但最近工作中遇到了关于透明背景导出GIF动画的问题:导出的GIF动画有白边,有锯齿感。 网上找了一大堆教程,主要原因出在GIF格式本身的问…

黑马程序员Java实战项目--- ATM系统

项目介绍与功能演示 黑马银行ATM系统技术选型分析: 学习本项目,你将至少得到如下收获: 1、优秀的面向对象编程能力。 2、 清晰、缜密的业务、数据分析能力。 3、熟练使用程序流程技术来控制计算机完成自己的想法。 4、形成良好的编码习惯…

【面试题】移除数组删除重复项合并数组

1️⃣ 原地移除数组中所有的元素val 【OJ链接】 2️⃣ 删除排序数组中的重复项 【OJ链接】 3️⃣ 合并两个有序数组 【OJ链接】 1️⃣ 原地移除数组中所有的元素val 题目要求是要在数组中,把指定的数字全部去除,题目中也是强调了空间复杂度要求为O(1)&am…

项目经理要“谋定而后动,知止而有得,万事皆有法,不可乱也”

出自《大学》,“谋定而后动,知止而有得”的含义为谋划准确周到而后行动,知道目的地(合适的时机收手)才能够有所收获。 谋定而后动是告诉我们做任何事一定要进行谋划部署,做好准备,我们才能开始行…

数据结构作业:时间复杂度和二叉树

计算时间复杂度&#xff1a; int x0,i,j; 1 for(i1;i<n;i) n { for(j1;j<2*i;j) 2(n-1) { x; 2(n-1)*n } } 2(n-1)*n2n^2-2n 修改后的运行次数函数中&#xff0c;只保留最高阶项。 所以时间复杂度为 &#xff1a;…

老生常谈的商城系统(Asp.Net+uniapp)

真正的大师,永远都怀着一颗学徒的心&#xff01; 最近几天合肥是真热 这时候就应该宅在家里 吃着西瓜 啃着鸭脖 喝着啤酒 刷着剧 想想也太美好了吧 哈哈 我得醒醒 写完这篇推荐 吃吃喝喝去了 一、项目简介 今天推荐一款商城系统&#xff0c;虽然比较老生常谈了&#xff0…

【项目】若依框架如何实现批量导入,并解析出表中内容返回给前端? - poi依赖

文章目录实现效果&#xff1a;具体实现步骤&#xff1a;扩展实例内容&#xff1a;poi工具包ExcelHandlerAdapter接口ExcelUtil.java代码controllerserviceserviceImplmapper.javamapper.xmlTnProductProperty.java实现效果&#xff1a; 点击“导入excl”按钮 --> 弹出“文件…

MSDC 4.3 接口规范(27)

MSDC 4.3 接口规范&#xff08;27&#xff09;7.4.4 代码7.4.5 更新组呼业务7.4.5.1 接口函数7.4.5.2 先决条件7.4.5.3 说明7.4.5.4 调用流程7.4.6 其他信息通知7.4.6.1 组呼服务停止7.4.6.1.1 接口函数7.4.6.1.2 先决条件7.4.6.1.3 说明7.4.6.1.4 调用流程7.4.6.2 SAI 列表更新…