袁庭新ES系列11节 | Elasticsearch基本查询

前言

查询操作是Elasticsearch最核心的模块之一。Elasticsearch能够达到数据的实时搜索,而且性能非常稳定,能很方便地用于对大量数据进行搜索和分析。这些都体现了Elasticsearch强大的搜索能力,因此关于Elasticsearch的查询知识的相关学习就显得非常重要。

本小节袁庭新老师就带领大家来学习Elasticsearch基本查询操作。我们从以下六个模块来学习Elasticsearch的基本查询功能。

  • 查询所有match_all
  • 匹配查询match
  • 词条匹配term
  • 布尔组合bool
  • 范围查询range
  • 模糊查询fuzzy

一. 查询所有match_all

1.语法结构

基本语法:

GET /索引库名/_search
{"query": {"查询类型": {"查询条件": "查询条件值"}}
}

这里的query代表一个查询对象,里面可以有不同的查询属性。

  • 查询类型:例如match_all、match、term、range等。
  • 查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解。

2.match_all查询

2.1 演示案例

演示示例:

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

语法说明:

属性

描述

query

代表查询对象

match_all

代表查询所有

响应结果:

{"took": 65,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 5,"max_score": 1,"hits": [{"_index": "yx","_type": "goods","_id": "5","_score": 1,"_source": {"title": "小米电视4A","images": "http://images.com","price": 3999}},{"_index": "yx","_type": "goods","_id": "4","_score": 1,"_source": {"title": "Apple手机","images": "http://image.yx.com/12479122.jpg","price": 6899}},{"_index": "yx","_type": "goods","_id": "lNC7KYUB35ub5htYEZMU","_score": 1,"_source": {"title": "小米手机","images": "http://image.yx.com/12479122.jpg","price": 2699}},{"_index": "yx","_type": "goods","_id": "2","_score": 1,"_source": {"title": "IPhone手机","images": "http://image.yx.com/12479122.jpg","price": 6299,"stock": 200,"saleable": true,"subTitle": "IPhone 15 Pro"}},{"_index": "yx","_type": "goods","_id": "1","_score": 1,"_source": {"title": "大米手机","images": "http://image.yx.com/12479122.jpg","price": 2899}}]}
}

上述代码运行后输出结果见下:

2.2 属性介绍

查询所有的属性介绍:

属性名

描述

took

查询花费时间,单位是毫秒

time_out

是否超时

_shards

分片信息

hits

搜索结果总览对象

搜索结果总览对象属性介绍:

属性名

描述

total

搜索到的总条数

max_score

所有结果中文档得分的最高分

hits

搜索结果的文档对象数组,每个元素是一条搜索到的文档信息

搜索结果的文档对象数组属性介绍:

属性名

描述

_index

索引库

_type

文档类型

_id

文档id

_score

文档得分。使用Elasticsearch时,对于查询出的文档无疑会有文档相似度之别。而理想的排序是和查询条件相关性越高排序越靠前,而这个排序的依据就是_score

_source

文档的源数据

二. match匹配查询

我们先加入一条数据,便于测试:

PUT /yx/goods/3
{"title": "小米电视4A","images": "http://image.yx.com/12479122.jpg","price": 3899.00
}

现在,索引库中有3部手机,1台电视。

1.OR关系

match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是OR的关系。

GET /yx/_search
{"query": {"match": {"title": "小米电视"}}
}

在上面的案例中,不仅会查询到“电视”,而且与“小米”相关的都会查询到,多个词之间是OR的关系。

2.AND关系

某些情况下,我们需要更精确查找:比如在电商平台精确搜索商品时,我们希望这个关系(查询条件切分词之后的关系)变成AND(既要满足你,又要满足我),可以这样做:

GET /yx/_search
{"query": {"match": {"title": {"query": "小米电视","operator": "and"}}}
}

本例中,只有同时包含“小米”和“电视”的词条才会被搜索到。

三. term词条匹配

term查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串,keyword类型的字符串。

效果类似于:SELECT * FROM tableName WHERE colName='value';的SQL语句。

GET /yx/_search
{"query": {"term": {"price": 2699.00}}
}

响应结果:

{"took": 19,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 1,"max_score": 1,"hits": [{"_index": "yx","_type": "goods","_id": "lNC7KYUB35ub5htYEZMU","_score": 1,"_source": {"title": "小米手机","images": "http://image.yx.com/12479122.jpg","price": 2699}}]}
}

上述代码运行后输出结果见下:

四. bool布尔组合

bool把各种其它查询通过must(与)、must_not(非)、should(或)的方式进行组合。

GET /yx/_search
{"query": {"bool": {"must": {"match": { "title": "大米" }},"must_not": {"match": {"title": "电视" }},"should": {"match": { "title": "手机" }}}}
}

响应结果:

{"took": 28,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 1,"max_score": 0.5753642,"hits": [{"_index": "yx","_type": "goods","_id": "1","_score": 0.5753642,"_source": {"title": "大米手机","images": "http://image.yx.com/12479122.jpg","price": 2899}}]}
}

上述代码运行后输出结果见下:

五. range范围查询

range查询找出那些落在指定区间内的数字或者时间。

GET /yx/_search
{"query": {"range": {"price": {"gte": 3000,"lte": 4000}}}
}

响应结果:

{"took": 14,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 1,"max_score": 1,"hits": [{"_index": "yx","_type": "goods","_id": "5","_score": 1,"_source": {"title": "小米电视4A","images": "http://images.com","price": 3999}}]}
}

上述代码运行后输出结果见下:

range查询允许以下字符:

操作符

说明

gt

大于

gte

大于等于

lt

小于

lte

小于等于

六. fuzzy模糊查询

fuzzy查询是term查询的模糊等价,很少直接使用它。

我们新增一个商品:

POST /yx/goods/4
{"title": "Apple手机","images": "http://image.yx.com/12479122.jpg","price": 6899.00
}

响应结果:

{"_index": "yx","_type": "goods","_id": "4","_version": 3,"result": "updated","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 9,"_primary_term": 4
}

上述代码运行后输出结果见下:

fuzzy查询是term查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2。

GET /yx/_search
{"query": {"fuzzy": {"title": "Apple"}}
}

上面的查询,也能查询到“Apple手机”这条数据。

七. 结语

本小节主要给小伙伴介绍了Elasticsearch的六大基本查询语句的操作。分别介绍了:查询所有match_all、匹配查询match、词条匹配term、布尔组合bool、范围查询range和模糊查询fuzzy等。这一块儿的内容很重要,需要大家反复练习进行掌握。好了这一小节我们就说到这里,下一小节将带领大家来学习Elasticsearch高级查询相关的内容。

今天的内容就分享到这里吧。关注「袁庭新」,干货天天都不断!

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

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

相关文章

秒懂百科,C++如此简单丨专栏导读及学习方法

目录 写在前面 专栏独有亮点 专栏目录总览 口头禅 订阅方式 保证 写在结尾 写在前面 本专栏为C的入门课程,包括了C的基础知识和算法入门。 如果你真心想学C,那么你一定要订阅此专栏,里面的21节课能够让新手快速入门。 🏅跟…

新能源汽车PACK电池包的气密性测试需要用到哪些快速密封连接器

PACK电池包是新能源汽车的重要部件之一,在全部组装完成后需要对其壳体进行气密性测试,以确保壳体的密封性能,避免有雨水、灰尘等外界侵扰拒之门外,从而保证电池的使用寿命不受损害。 新能源汽车PACK电池包 在做气密性测试时需要用…

[rospack] Error: package ‘moveit_setup_assistant‘ not found解决方法

执行:rosrun moveit_setup_assistant moveit_setup_assistant 显示报错:[rospack] Error: package ‘moveit_setup_assistant’ not found 这是由于没有安装moveit的包,所以找不到。 解决方法就是安装moveit包: sudo apt-get in…

备战蓝桥杯————双指针技巧巧解数组1

利用双指针技巧来解决七道与数组相关的题目。 两数之和 II - 输入有序数组: 给定一个按升序排列的数组,找到两个数使它们的和等于目标值。可以使用双指针技巧,在数组两端设置左右指针,根据两数之和与目标值的大小关系移动指针。 …

展锐S8000安卓核心板参数_紫光展锐5G核心板模块定制方案

展锐S8000核心板模块是基于八核S8000平台开发设计的,采用了先进的6nm EUV制程技术。搭载了全新的智能Android 13操作系统,展现出超强的画面解析能力和高性能双通道MIPI,拥有120Hz高刷新率,独立NPU和3.2TOPS Al算力,同时…

K8S-001-Virtual box - Network Config

A. 配置两个IP, 一个连接内网,一个链接外网: 1. 内网配置(Host only, 不同的 virutal box 的版本可以不一样,这些窗口可能在不同的地方,但是配置的内容是一样的): 静态IP 动态IP 2. 外网(创建一个 Networ…

旷视low-level系列(三):(NAFNet)Simple Baselines for Image Restoration

题目:Simple Baselines for Image Restoration 单位:旷视 收录:ECCV2022 论文:https://arxiv.org/abs/2204.04676 代码:https://github.com/megvii-research/NAFNet 文章目录 1. Motivation2. Contributions3. Methods…

ElasticSearch 环境安装

ElasticSearch 安装 下载地址:https://www.elastic.co/downloads/past-releases#elasticsearch elasticsearch 使用的jdk说明: elasticsearch自带有jdk,如果需要使用自带的jdk则需要自定义环境变量ES_JAVA_HOME到es下的jdk目录 D:\fenbushi\e…

VR系统的开发流程

虚拟现实(Virtual Reality,VR)系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境,使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备,使用户能够感觉到仿佛身临其境…

数字热潮:iGaming 能否推动加密货币的普及?

过去十年,iGaming(互联网游戏)世界有了显著增长,每月有超过一百万的新用户加入。那么,这一主流的秘密是什么?让我们在本文中探讨一下。 领先一步:市场 数字时代正在重新定义娱乐,iG…

2024年大语言模型(LLM)微调方法最全总结!

众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&#x…

yolov5-tracking-xxxsort yolov5融合六种跟踪算法(三)--目标跟踪

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接:https://github.com/zzhmx/yolov5-tracking-xxxsort.git 先按照之前的博客配置好环境: yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)–环境配…

【PPT技巧】如何批量替换PPT中的字体?

网上下载的ppt模板里面的字体不太满意,想要修改字体,该如何批量修改ppt内的全部字体呢?今天分享两份方法,帮助我们快速修改全部字体。 方法一: 找到功能栏中的编辑选项卡,点击替换 – 替换字体&#xff0…

【自然语言处理】:实验4答案,预训练语言模型实现与应用

代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主,接实验技术指导1对1 实验要求布置请看http://t.csdnimg.cn/1sh7s 运行模型,测试模型在有 100%…

深入了解Java泛型的底层原理

深入了解Java泛型的底层原理 在Java编程中,泛型是一项强大的特性,它允许我们编写更加通用和类型安全的代码。然而,对于许多开发者来说,泛型的底层原理可能并不清晰。本文将深入探讨Java泛型的底层实现原理,帮助您更好…

第九节HarmonyOS 常用基础组件24-Navigation

1、描述 Navigation组件一般作为Page页面的根容器,通过属性设置来展示的标题栏、工具栏、导航栏等。 2、子组件 可以包含子组件,推荐与NavRouter组件搭配使用。 3、接口 Navigation() 4、属性 名称 参数类型 描述 title string|NavigationComm…

编译GCC native编译器的几点启示

启示 编译 GCC native compiler按照官方介绍并不难 步骤见后面实践脚本,以及官方编译指南链接 GCC编译器编译其它程序组件时,会优先使用自身携带的库,例如,常用的自带库,libgcc_s.so、libstdc 如果部署环境与编译要求…

Sentinel微服务流量治理组件实战上

目录 分布式系统遇到的问题 解决方案 Sentinel 是什么? Sentinel 工作原理 Sentinel 功能和设计理念 流量控制 熔断降级 Sentinel工作主流程 Sentinel快速开始 Sentinel资源保护的方式 基于API实现 SentinelResource注解实现 Spring Cloud Alibaba整合…

职业规划,电气工程师的岗位任职资格

电气工程技术人员主要是指精通电气施工技术,从事与电气产相关研发工作并能够解决实际问题,对相关资源进行最终统筹的人员。一般来说,这类人员主要从事绘制、审核和把关电气图纸的工作,在审核电气图纸的时候,会检查施工…

如何将建筑白模叠加到三维地球上?

​ 通过以下方法可以将建筑白模叠加到三维地球上。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe,安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“建筑白模”菜单&…