Elasticsearch常用查询语法及RestClient操作

ops/2024/9/20 1:29:44/ 标签: elasticsearch, 大数据, 搜索引擎

DSL Query基本语法

1,查询所有数据matchall(当然并不是会显示所有数据)

#查询所有数据
GET /索引名/_search
{"query": {"查询类型": {"查询条件":"条件值"}}
}

 2,全文搜索检索-分词搜索

match查询:全文检索查询的一种,会对用户内容分词,然后去倒排索引库检索,语法。

#根据条件查询 matchGET /索引名/_search
{"query": {"查询类型": {"查询那个字段": "查询的具体值"}}
}
# 示例
GET /hotel/_search
{"query": {"match": {"all": "北京"}}
}

multi_match:和match类似,但是它允许多个字段进行查询

# 根据多个字段来搜 multi_match
GET /索引名/_search
{"query": {"查询类型": {"query": "需要查询字段的具体值","fields": ["查询字段1","查询字段2"]}}
}# 根据多个字段来搜 multi_match
GET /hotel/_search
{"query": {"multi_match": {"query": "北京","fields": ["city","name"]}}
}

解释:在hotel索引库中按照addressname两个字段搜索值包含北京的文档

3,精准查询

精准查询一般是查找keyword,数值,日期,boolean等不可分割的字段。

term:根据词条精准查询

range:根据值的范围查询

term查询

#精准查询-term
GET /索引名/_search
{"query": {"查询类型": {"查询字段": {"value": "查询的具体值"}}}
}#精准查询-term
GET /hotel/_search
{"query": {"term": {"city": {"value": "上海"}}}
}

解释:在hotel索引库中查找city的值等于上海的所有文档,(city值一定是上海

range查询-范围查询


#精准查询-范围查询range
GET /索引名/_search
{"query": {"查询类型": {"查询字段": {"gte": 最小值,"lte": 最大值}}}
}GET /hotel/_search
{"query": {"range": {"score": {"gte": 10,"lte": 45}}}
}

解释:在hotel索引库中查询score的值大于等于10小于等于45的文档。

4,复合查询

复合查询:复合查询可以将其他简单查询组合起来,实现更复杂的逻辑,例如:

funcation_score:算分函数查询,可以根据某些规则(打分算法)计算文档得分

1,funcation score Query

例如:

#修改得分
GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"all": "北京"}},"functions": [{"filter": {"term": {"brand": "如家"}},"weight": 10}],"boost_mode": "multiply"}}}

解释:查询索引库为hotel索引库,查询字段为all,值为北京,过滤brand为如家的文档,得分方式为默认,乘10.

2,Boolean Query

布尔查询是一个或者多个子句的组合子查询的组合方式有
must:必须匹配每个子查询,类似“与
should:选择性匹配子查询,类似“或
must_not:必须不匹配,不参与算分,类似“非
filter:必须匹配,不参与算分

例如,查询名字包含如家,价格不高于400的酒店

# 使用bool查询功能
GET /hotel/_search
{"query": {"bool": {"must": [{"match": {"name": "如家"}}],"must_not": [{"range": {"range": {"gt": 400}}}]}}
}

使用RestClient进行query查询

建议在上一篇博客基础上进行

RestClient操作Elasticsearch(Java)-CSDN博客文章浏览阅读838次,点赞30次,收藏12次。Es官方提供了各种不用语言的客户端,用来操作Es,这些客户端的本质就是组装DSL语句,通过http请求发送给Es,从而简化操作es基础篇不熟悉参考一下博客:ElasticSearch入门篇-CSDN博客Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。https://blog.csdn.net/qq_63837759/article/details/137755058?spm=1001.2014.3001.5501

全文检索查询-分词搜索

会在倒排索引库中做分词匹配,类似于模糊查询

因为最后的结果需要解析,于是为了后续代码的简洁,我们把解析的代码单独书写出来,这里用的是fastJson:

/***用来解析返回的数据,包含高亮处理(针对的是name字段)* @param searchResponse 发送请求之后的响应*/void parseData( SearchResponse searchResponse){//解析拿到的数据//有用的数据都在这个对象里面SearchHits hits = searchResponse.getHits();//获取数据总数long total = hits.getTotalHits().value;System.out.println("数据总数:"+total);//这个数组里面存放的是每一条数据SearchHit[] searchHits = hits.getHits();for (SearchHit documentFields : searchHits) {String sourceJson = documentFields.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(sourceJson, HotelDoc.class);//进行高亮的结果解析Map<String, HighlightField> highlightFieldMap = documentFields.getHighlightFields();if(!CollectionUtils.isEmpty(highlightFieldMap)){HighlightField highlightField = highlightFieldMap.get("name");if(highlightField!=null){//获取高亮处理后的nameString name = highlightField.fragments()[0].string();hotelDoc.setName(name);}}System.out.println(hotelDoc);}}

1,matchAll查询(查询所有数据,但是只返回十条)

@Testvoid matchAllTest() throws IOException {//1,创建请求SearchRequest request=new SearchRequest("hotel");//2,准备请求参数request.source().query(QueryBuilders.matchAllQuery());//3,发送请求SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);//4,解析拿到的数据parseData(searchResponse);}

2,match查询(根据一个字段进行查询)

/*** match查询,可以指定字段及逆行查询,但是只能指定一个* @throws IOException*/@Testvoid matchTest() throws IOException {//1,创建请求SearchRequest request=new SearchRequest("hotel");//2,准备请求参数,针对all字段,对所有all中包含北京的进查询request.source().query(QueryBuilders.matchQuery("all","北京"));//因为es默认返回十条数据,我们如果向返回多一点,可以设置返回的数量request.source().size(20);//3,发送请求SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);//4,解析拿到的数据parseData(searchResponse);}

3,multi_match:(和match类似,但允许对多个字段进行查询)

/*** multiMatch查询,可以指定多个字段* @throws IOException*/@Testvoid multiMatchTest() throws IOException {SearchRequest request =new SearchRequest("hotel");//指定查询字段的值是多少,并指定那个字段,可以有多个,我们这里指定name,和cityrequest.source().query(QueryBuilders.multiMatchQuery("北京","name","city"));SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);parseData(searchResponse);}

精准查询

精准查询-字段基本上是keyword类型的不可以在分词

term查询

/*** term查询-根据词条精准查询* @throws IOException*/@Testvoid termTest() throws IOException {SearchRequest request =new SearchRequest("hotel");//指定查询字段的值是多少,并指定那个字段,这个查询的值是固定的完全匹配的request.source().query(QueryBuilders.termQuery("city","上海"));SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);parseData(searchResponse);}

range查询

/*** range查询-根据条件范围插寻* @throws IOException*/@Testvoid rangTest() throws IOException {SearchRequest request =new SearchRequest("hotel");//指定词条进行范围插寻,查找评分从20到40 的酒店request.source().query(QueryBuilders.rangeQuery("score").gt(20).lt(40));SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);parseData(searchResponse);}

对查询结果做排序分页

/*** 针对查询结果做排序和分页* @throws IOException*/@Testvoid PageSortTest() throws IOException {int page=3;int size=5;SearchRequest request =new SearchRequest("hotel");//使用matchall查询所有酒店request.source().query(QueryBuilders.matchAllQuery());//对查询结果进行排序和分页,from:第几页。size;每页大小request.source().from((page-1)*size).size(size);//排序,针对价格字段降序,从高到低request.source().sort("price", SortOrder.DESC);SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);parseData(searchResponse);}

对查询结果做高亮处理

/*** 对查询结果高亮处理* @throws IOException*/@Testvoid HignLightTest() throws IOException {SearchRequest request =new SearchRequest("hotel");//指定词条进行范围插寻,查找all字段中包含如家的酒店request.source().query(QueryBuilders.matchQuery("all","如家"));//查询后的name字段高亮处理,可以指定多个字段进行高亮request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);parseData(searchResponse);}

至此,es基础查询完结,了解更多,可查看官方文档!!!

Quick start | Elasticsearch Guide [8.13] | Elasticicon-default.png?t=N7T8https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html


http://www.ppmy.cn/ops/7806.html

相关文章

c语言基础总结

1. c语言概述 c语言是计算机编程语言的一种&#xff0c;编程语言用于人和机器交流。 1.1 c语言特点 简洁 ​ c语言的语法简单&#xff0c;语句清晰明了&#xff0c;使得程序易于阅读和理解 高效 ​ c语言的执行效率高&#xff0c;可以用于开发需要高性能的应用程序 可移…

Windows bat实现循环往txt文件插入1000条数据内容

bat脚本实现&#xff1a; echo off for /L %%i in (1,1,1000) do (echo "I am from 192.168.10.171" >> c:\ztj.txt ) echo off --在批处理运行命令的时候不会一条一条的显示执行的命令 for /L %variable in (start,step,end) do command [command-p…

2024数学建模时间汇总与竞赛攻略

目录 2024数学建模汇总&#xff08;时间、报名费、获奖率、竞赛级别、是否可跨校&#xff09; 中国高校大数据挑战赛 “华数杯”国际大学生数学建模竞赛 美国大学生数学建模竞赛&#xff08;美赛&#xff09; 数学中国&#xff08;认证杯&#xff09;数学建模网络挑战赛 …

【多线程学习】深入探究定时器的重点和应用场景

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【技术】Spring Boot 将 Word 转换为 PDF 2.0 版本

之前写过一篇 Spring Boot 将 Word 转换为 PDF 的文章&#xff0c;但是有评论说导入依赖有问题&#xff0c;还存在依赖冲突的问题。索性再来一个完整版的代码&#xff0c;之前的完整版代码找不到了&#xff0c;又重新整理了一下&#xff0c;依赖导入和之前不太一样&#xff0c;…

Linux动态追踪——eBPF

目录 摘要 1 什么是 eBPF 2 eBPF 支持的功能 3 BCC 4 编写脚本 5 总结 6 附 摘要 ftrace 和 perf 与 ebpf 同为 linux 内核提供的动态追踪工具&#xff0c;其中 ftrace 侧重于事件跟踪和内核行为的实时分析&#xff0c;perf 更侧重于性能分析和事件统计&#xff0c;与…

达梦数据库的监听进程

达梦数据库&#xff08;DMDB&#xff09;也同样有监听进程&#xff0c;其主要职责是监听来自客户端的连接请求。这里的监听进程指的是达梦数据库服务启动后&#xff0c;在操作系统级别监听特定TCP/IP端口&#xff08;默认情况下是5236&#xff0c;但这可以配置&#xff09;的进…

Spring Security之Session管理

前言 在聊认证过滤器的时候&#xff0c;我们埋了个坑&#xff1a;Session管理。实际上&#xff0c;事情从这里开始&#xff0c;就变得复杂了。提前跟大家交个底&#xff1a;后续我们将涉及多个需要协同才能完成的功能。 什么是Session 想要管理session&#xff0c;就必须搞清…

Web前端框架/库/工具

前言 前端从步枪&#xff08;原生js&#xff09;到了半自动武器&#xff08;jQuery&#xff09;并进化为全自动武器&#xff08;三大框架&#xff08;angular&#xff0c;react&#xff0c;vue及其生态链&#xff09;&#xff09;。 常说工欲善其事必先利其器。对于那些想要提…

TPCC MySQL

目录 1. tpcc-mysql下载 2. tpcc-mysql安装 3. 初始化tpcc-mysql 4. 使用tpcc-mysql测试 5. 结果解释 1. tpcc-mysql下载 https://github.com/Percona-Lab/tpcc-mysql 2. tpcc-mysql安装 [rootlocalhost soft]# unzip tpcc-mysql-master.zip [rootlocalhost soft]# cd t…

代码随想录训练营24day-贪心算法2

一、122 买卖股票最佳时机 题目介绍限制条件&#xff0c;必须卖了再买&#xff0c;而且当前交易一只股票。一开始想法是去遍历&#xff0c;找到每个区间段间的差值&#xff0c;然后再相加。看了解答&#xff0c;其实每一天的利润&#xff0c;都是可以用差值表示出来&#xff0…

Spring - 1 ( 8000 字 Spring 入门级教程 )

一&#xff1a;SpringBoot 快速上手 环境准备 ⾃检Idea版本: 社区版: 2021.1 -2022.1.4专业版: ⽆要求 如果个⼈电脑安装的idea不在这个范围, 需要卸载重新安装.&#xff08;⼀定要删除注册表&#xff09; Maven Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,…

centos 7.9 安装 ftp 传输文件

ftp server 端 sudo yum install vsftpd ftp其中 vsftpd 为 ftp server 端&#xff0c;ftp 包含 ftp 这个客户端命令。 # sudo rpm -ql vsftpd/etc/logrotate.d/vsftpd /etc/pam.d/vsftpd /etc/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf /…

耀斑层-如何在Unity中实现耀斑亮光效果

在Unity中实现耀斑亮光效果可以通过以下步骤来实现&#xff1a; 创建一个空物体作为光源&#xff1a;在场景中创建一个空物体&#xff0c;并将其放置在需要发出耀斑亮光效果的位置上。 添加光源组件&#xff1a;选中空物体&#xff0c;在Inspector面板中点击"Add Compone…

C# 下记录(Record)详解

在C# 9.0中&#xff0c;引入了一个新的关键字&#xff1a;record。record关键字用于定义记录类型&#xff0c;这是一种不可变的数据结构&#xff0c;用于表示具有明确字段名称和类型的数据集。本文将详细介绍C#中record类型的使用和特点&#xff0c;以及如何通过记录记录器&…

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…

数据结构--双向链表

在讲双向链表之前&#xff0c;我们先了解一下链表的分类&#xff1a; 链表的结构⾮常多样&#xff0c;主要分为带头与不带头、单向与双向、循环与不循环。三个种类可以任意搭配&#xff0c;所以总共可以形成八种链表&#xff0c;但是最常用的是单向不带头不循环链表和双向带头循…

html、css、QQ音乐移动端静态页面,资源免费分享,可作为参考,提供InsCode在线运行演示

CSDN将我上传的免费资源私自变成VIP专享资源&#xff0c;且作为作者的我不可修改为免费资源&#xff0c;不可删除&#xff0c;寻找客服无果&#xff0c;很愤怒&#xff0c;&#xff08;我发布免费资源就是希望大家能免费一起用、一起学习&#xff09;&#xff0c;接下来继续寻找…

代码托管基础操作

在待上传代码文件夹中右键&#xff0c;打开Git Bash Here依次输入以下命令&#xff1a; git init(在本地初始化一个代码仓库&#xff0c;具体表现为会在你的文件夹里出现一个隐藏的.git文件夹) git add .&#xff08;先把代码放到本地的一个缓冲区&#xff09;添加当前目录下的…

命理八字之答案之书前端uniapp效果实现

#uniapp# #答案之书# 不讲废话&#xff0c;先上截图 <div class"padding"><div class"flex align-center justify-center" style"padding-top:100px;"><div class"radarContainer"><div id"radarBox"…