当前位置: 首页 > news >正文

Elasticsearch之常用DSL语句

目录

1. Elasticsearch之常用DSL语句

1.1 操作索引

1.2 文档操作

1.3 DSL查询

1.4 搜索结果处理

1.5 数据聚合


1. Elasticsearch之常用DSL语句

1.1 操作索引

mapping是对索引库中文档的约束,常见的mapping属性包括:

- type:字段数据类型,常见的简单类型有:
  - 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
  - 数值:long、integer、short、byte、double、float、
  - 布尔:boolean
  - 日期:date
  - 对象:object
- index:是否创建索引,默认为true
- analyzer:使用哪种分词器
 

创建索引

PUT /goods
{"mappings": {"properties": {"brandName": {"type": "keyword"},"categoryName": {"type": "keyword"},"createTime": {"type": "date","format": "yyyy-MM-dd HH:mm:ss"},"id": {"type": "keyword"},"price": {"type": "double"},"saleNum": {"type": "integer"},"status": {"type": "integer"},"stock": {"type": "integer"},"title": {"type": "text","analyzer": "ik_max_word",}}}
}

查询索引

GET /goods

修改索引库

倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping

虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。

PUT /索引库名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}

删除索引库

DELETE /goods

1.2 文档操作

新增文档

POST /goods/_doc/1
{"id": 1,"brandName": "Apple","categoryName": "手机","createTime": "2023-12-26 20:00:00","price": 8000,"saleNum": 100,"status": 0,"stock": 100,"title": "Apple iPhone 15 Pro 256GB 远峰蓝色 支持移动联通电信5G 双卡双待手机"
}POST /goods/_doc/2
{"id": 2,"brandName": "Huawei","categoryName": "手机","createTime": "2023-12-26 20:00:00","price": 7000,"saleNum": 400,"status": 0,"stock": 200,"title": "华为 HUAWEI Mate 60 Pro 智能手机 鸿蒙系统卫星通话昆仑玻璃"
}

查询文档

GET /goods/_doc/1//批量获取
GET goods/_doc/_mget
{"ids":["1","2"]
}

删除文档

DELETE /goods/_doc/1

修改文档

全量修改是覆盖原来的文档,其本质是:

  • 根据指定的id删除文档
  • 新增一个相同id的文档

注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。

PUT /{索引库名}/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 略
}

增量修改是只修改指定id匹配的文档中的部分字段。

POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}

1.3 DSL查询

查询所有

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

全文检索

//单字段查询
GET /goods/_search
{"query": {"match": {"title": "手机"}}
}//多字段查询
GET /goods/_search
{"query": {"multi_match": {"query": "手机","fields": ["title"]}}
}

精准查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:

- term:根据词条精确值查询
- range:根据值的范围查询

term查询的字段是不分词的字段,因此查询的条件也必须是不分词的词条。查询时,用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多,反而搜索不到数据。 

GET /goods/_search
{"query": {"term": {"categoryName": {"value": "手机"}}}
}//匹配多个term
GET /goods/_search
{"query": {"terms": {"categoryName": ["手机","电脑"]}}
}

范围查询,一般应用在对数值类型做范围过滤的时候。比如做价格范围过滤。

GET /goods/_search
{"query": {"range": {"price": {"gte": 7500,"lte": 9000}}}
}

复合查询

- must:必须匹配的条件,可以理解为“与”
- should:选择性匹配的条件,可以理解为“或”
- must_not:必须不匹配的条件,不参与打分
- filter:必须匹配的条件,不参与打分

POST goods/_search
{"query": {"bool": {"must": [{"term": {"brandName": {"value": "Apple"}}}],"should": [{"term": {"categoryName": {"value": "手机"}}}],"filter": [{"range": {"stock": {"gt": 0}}}]}}
}

1.4 搜索结果处理

普通字段排序

GET /goods/_search
{"query": {"match_all": {}},"sort": [{"stock": "desc"  //asc升序}]
}

分页

elasticsearch中通过修改from、size参数来控制要返回的分页结果:

- from:从第几个文档开始
- size:总共查询几个文档

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

高亮显示

POST goods/_search
{"query": {"match": {"title": "手机"}},"highlight": {"fields": {"title": {"pre_tags": ["<font color='red'>"],"post_tags": ["</font>"]}}}
}

1.5 数据聚合

聚合常见的有三类:

- 桶(Bucket)聚合:用来对文档做分组
  - TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组
  - Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组

- 度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
  - Avg:求平均值
  - Max:求最大值
  - Min:求最小值
  - Stats:同时求max、min、avg、sum等
- 管道(pipeline)聚合:其它聚合的结果为基础做聚合

统计所有数据中的品牌有几种,按照品牌对数据分组。

GET /goods/_search
{"size": 0,  //设置size为0,结果中不包含文档,只包含聚合结果"aggs": { // 定义聚合"brandAgg": { //给聚合起个名字"terms": { // 聚合的类型,按照品牌值聚合,所以选择term"field": "brandName", // 参与聚合的字段"size": 20 // 希望获取的聚合结果数量}}}
}

 对于每个品牌的聚合限定聚合范围,并且根据Bucket内的文档数量进行升序排序

GET /goods/_search
{"query": {"range": {"stock": {"gte": 10}}}, "size": 0,  //设置size为0,结果中不包含文档,只包含聚合结果"aggs": { // 定义聚合"brandAgg": { //给聚合起个名字"terms": { // 聚合的类型,按照品牌值聚合,所以选择term"field": "brandName", // 参与聚合的字段"size": 20, // 希望获取的聚合结果数量"order": {"_count": "asc"}}}}
}

按照品牌分组,形成了一个个桶。对桶内的数据做运算,获取每个品牌的stock的min、max、avg等值。

GET /goods/_search
{"query": {"range": {"stock": {"gte": 10}}}, "size": 0,  "aggs": { "brandAgg": {"terms": {"field": "brandName", "size": 20, "order": {"_count": "asc"}},"aggs": {"stock_status": {"stats": {"field": "stock"}}}}}
}

相关文章:

Elasticsearch之常用DSL语句

目录 1. Elasticsearch之常用DSL语句 1.1 操作索引 1.2 文档操作 1.3 DSL查询 1.4 搜索结果处理 1.5 数据聚合 1. Elasticsearch之常用DSL语句 1.1 操作索引 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; - type&#xff1a;字段数据类…...

鸿蒙实战-库的调用(ArkTS)

整体框架搭建 主页面、本地库组件页面、社区库组件页面三个页面组成&#xff0c;主页面由Navigation作为根组件实现全局标题&#xff0c;由Tabs组件实现本地库和社区库页面的切换。 // MainPage.ets import { Outer } from ../view/OuterComponent; import { Inner } from ..…...

观察者模式学习

观察者模式&#xff08;Observer Design Pattern&#xff09;也被称为发布订阅模式&#xff08;Publish-Subscribe Design Pattern&#xff09;。在 GoF 的《设计模式》一书中&#xff0c;它的定义是这样的&#xff1a; Define a one-to-many dependency between objects so th…...

人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118

首先看一下什么是聚类,我们可以进入sklearn的官网去看看 可以看到这里,首先classification 这个分类我们学完了,然后就是regression回归我们也学完了对吧,其实我们现实生活中的,大部分问题就是 这两种问题就可以解决了. 然后我们再来看一个: clustering,这个就是聚类对吧.聚类算…...

基于AR+地图导航的景区智慧导览设计

随着科技的飞速发展&#xff0c;智慧旅游已经成为现代旅游业的一个重要趋势。在这个背景下&#xff0c;景区智慧导览作为智慧旅游的核心组成部分&#xff0c;正逐渐受到越来越多游客的青睐。本文将深入探讨地图导航软件在景区智慧导览中的应用&#xff0c;并分析其为游客和景区…...

git基本指令

下载代码 git clone http://.......设置分支 git checkout 分支名查询当前分支 git checkout打开终端或命令行窗口&#xff0c;进入你要操作的项目目录&#xff0c;执行以下命令&#xff0c;列出所有的分支&#xff0c;这会列出当前代码仓库中的所有分支&#xff0c;用带星号…...

ECMAScript基础入门

ECMAScript&#xff08;简称ES&#xff09;是一种标准化了的高级编程语言&#xff0c;它是JavaScript语言的标准化版本&#xff0c;由Ecma International组织发布。ECMAScript描述了JavaScript的语法和核心特性&#xff0c;而JavaScript是实现ECMAScript标准的编程语言。随着We…...

神经网络介绍

目录 知识点介绍 知识点介绍 前馈神经网络&#xff1a;&#xff08;前馈网络的数据只向一个方向传播&#xff09; RNN循环神经网络&#xff0c;下图中多个 RNN 层都是“同一个层”&#xff0c;这一点与之前的神经网络是不一样的。...

CPU亲和性和NUMA架构

何为CPU的亲和性 CPU的亲和性&#xff0c;进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性&#xff0c;进程迁移的频率小就意味着产生的负载小。亲和性一词是从affinity翻译来的&#xff0c;实际可以称为CPU绑定。 在多核运行的机器上&#xff0c;…...

目标检测-Two Stage-Fast RCNN

文章目录 前言一、Fast RCNN的网络结构和流程二、Fast RCNN的创新点1.特征提取分类回归合一2.更快的训练策略 总结 前言 前文目标检测-Two Stage-SPP Net中提到SPP Net的主要缺点是&#xff1a; 分开训练多个模型困难且复杂尽管比RCNN快10-100倍&#xff0c;但仍然很慢SPP Ne…...

vol----随记!!!

目录 一、代码生成1.先新建一个功能的对应的代码配置各项解释&#xff1a; 2.后设置配置菜单3.再点保存&#xff0c;生成vue页面&#xff0c;生成model&#xff0c;生成业务类4.再通过菜单设置编写系统菜单 一、代码生成 1.先新建一个功能的对应的代码配置 各项解释&#xff…...

vue中样式动态绑定写法

绑定样式: class样式 写法:class"xxx"xXX可以是字符串、对象、数组。 字符串写法适用于:类名不确定&#xff0c;要动态获取。 对象写法适用于:要绑定多个样式,个数不确定&#xff0c;名字也不确定。 数组写法适用于:要绑定多个样式&#xff0c;个数确定&#xff0c;…...

C语言—每日选择题—Day63

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 设C语言中&#xff0c;一个int型数据在内存中占2个字节&#xff0c;则unsigned int型数据的取值范围为 A&#xff1a;0~255 B&#xff1a;0…...

Mac_通过chmod处理文件权限

chmod 简介 chmod 是一个 Unix 和类 Unix 系统中的命令&#xff0c;用于更改文件或目录的权限。chmod 的名称来源于 “change mode”&#xff0c;它允许用户修改文件或目录的读取&#xff08;read&#xff09;、写入&#xff08;write&#xff09;和执行&#xff08;execute&a…...

实战指南:使用 Spring Cloud Stream 集成 Kafka 构建高效消息驱动微服务

实战指南&#xff1a;使用 Spring Cloud Stream 集成 Kafka 构建高效消息驱动微服务 视频地址&#xff1a; Stream为什么被引入-尚硅谷SCS-1-内容介绍-图灵诸葛 官方文档&#xff1a; Spring Cloud Stream 什么是 Spring Cloud Stream? Spring Cloud Stream(SCS) 是一个用于构…...

线性代数基础【3】向量

第一节 向量的概念与运算 一、基本概念 ①向量 ②向量的模(长度) ③向量的单位化 ④向量的三则运算 ⑤向量的内积 二、向量运算的性质 (一)向量三则运算的性质 α β β αα (β γ) (α β) γk (α β) kα kβ(k l) α kα lα (二)向量内积运…...

Spring Boot + MinIO 实现文件切片极速上传技术

文章目录 1. 引言2. 文件切片上传简介3. 技术选型3.1 Spring Boot3.2 MinIO 4. 搭建Spring Boot项目5. 集成MinIO5.1 配置MinIO连接信息5.2 MinIO配置类 6. 文件切片上传实现6.1 控制器层6.2 服务层6.3 文件切片上传逻辑 7. 文件合并逻辑8. 页面展示9. 性能优化与拓展9.1 性能优…...

uniapp中如何使用image图片

当在UniApp中使用图片时&#xff0c;可以通过<image>标签将图片显示在页面上。这个标签可以指定src属性来引用图片&#xff0c;并且可以通过mode属性来设置图片的显示模式。除此之外&#xff0c;还可以利用click事件来实现图片的点击事件。在编写代码时&#xff0c;要注意…...

docker-compose 安装gitlab

写在前面的话&#xff1a;docker-compose的文件是通用的&#xff0c;因此可以切换任意版本的gitlab的镜像版本。 往期docker-compose部署系列如&#xff1a; docker-compose语法格式docker-compose部署openldapdocker-compose 安装Sonar并集成gitlab 文章目录 1. 参考文档2. 环…...

到底是前端验证还是后端验证

背景 软件应用研发中&#xff0c; 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚&#xff0c;我们再来看下&#xff1a; 一. 从软件行业来自国外 Q: 前端验证和后端验证都是对同一个数据的验证&#xff0c;有什么区别&#xff1f; A: 二者的目的不同&…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

【Linux】使用1Panel 面板让服务器定时自动执行任务

服务器就是一台24小时开机的主机&#xff0c;相比自己家中不定时开关机的主机更适合完成定时任务&#xff0c;例如下载资源、备份上传&#xff0c;或者登录某个网站执行一些操作&#xff0c;只需要编写 脚本&#xff0c;然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...

XXE漏洞知识

目录 1.XXE简介与危害 XML概念 XML与HTML的区别 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念与危害 案例&#xff1a;文件读取&#xff08;需要Apache >5.4版本&#xff09; 案例&#xff1a;内网探测&#xff08;鸡肋&#xff09; 案例&#xff1a;执行命…...