Elasticsearch常用查询语法及RestClient操作

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.mzph.cn/news/826747.shtml

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

相关文章

从零实现诗词GPT大模型:实现Transformer架构

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 首先说明一下,跟其他文章不太一样,在本篇文章中不会对Transformer架构中的自注意力机制进行讲解,而是后面单独1~2篇文章详细讲解自注意力机制,我认为由浅入深的先了解Transformer整体架构和其中比较简单…

IDEA JAVA项目如何设置JVM参数

问题背景&#xff1a; 有时候项目在本地启动时会报参数引用不到&#xff0c;如果确实找不到在哪里添加的话&#xff0c;我们可以先加JVM参数来暂时解决本地环境的调试。 解决方案&#xff1a; 编辑配置Edit Configurations 选择需要配置的项目&#xff0c;点击Modify options 选…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

mfc140.dll丢失如何修复,分享多种有效的修复方法

在日常操作和使用电脑的过程中&#xff0c;我们可能会遇到一种较为常见的问题&#xff0c;即在尝试启动或运行某个应用程序时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出“mfc140.dll文件丢失”。这个mfc140.dll实际上是一个动态链接库文件&#xff08;DLL&…

mysql基础19——日志

日志 mysql的日志种类非常多 通用查询日志 慢查询日志 错误日志 与时间有关联 二进制日志 中继日志 与主从服务器的同步有关 重做日志 回滚日志 与数据丢失有关 通用查询日志 记录了所有用户的连接开始时间和截至时间 以及给mysql服务器发送的所有指令 当数据异常时&…

计算机体系结构

体系结构 CPU&#xff1a;运算器和控制器 运算器&#xff1a;进行算术和逻辑运算控制器&#xff1a; 输入设备&#xff1a;鼠标、键盘、显示器、磁盘、网卡等输出设备&#xff1a;显卡&#xff0c;磁盘、网卡、打印机等存储器&#xff1a;内存&#xff0c;掉电易失总线&#xf…

借助 NVivo 彻底改变业务创新

在收集定性数据时&#xff0c;通常很难确定信息的情感底蕴。尤其是在金融行业&#xff0c;当涉及到经济金融状况和股票走势等问题时&#xff0c;通过文章、社交媒体和其他消费者平台了解市场的真实整体感受至关重要。这就是对数据应用情绪分析可以提供帮助的地方。 在德勤 针对…

代码随想录第42天|416. 分割等和子集

416. 分割等和子集 416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之背包问题&#xff0c;这个包能装满吗&#xff1f;| LeetCode&#xff1a;416.分割等和子集_哔哩哔哩_bilibili 给你一个 只包含正整数 的 非空 数组…

软件测试之【软件测试概论一】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言软件生命周期软件项目开发过程软件项目组织架构软件开发相关模型 软件测试…

深入理解与实践“git add”命令的作用

文章目录 **git add命令的作用****git add命令的基本作用****高级用法与注意事项** git add命令的作用 引言&#xff1a; 在Git分布式版本控制系统中&#xff0c;git add命令扮演着至关重要的角色&#xff0c;它是将本地工作区的文件变动整合进版本控制流程的关键步骤。本文旨…

《乱弹篇(30)厌战的杜诗》

时下地球村有一伙成天叫嚣着“打打杀杀”、鼓吹快快发动战争的狂人&#xff0c;他们视老百姓的生命如草芥&#xff0c;毫不珍惜。没有遭受过战火焚烧的人&#xff0c;也跟着成天吠叫“快开战吧”。然而中国唐朝大诗人却是个“厌战派”&#xff0c;他对战争的厌恶集中表现在诗《…

放大器DC参数测试(1)

放大器DC参数测试(1) Hi,uu们,最近在忙啥呢?想好5.1,端午去哪里玩了吗? 咱们直接开始正题,放大器的DC参数还挺多,在Bench测试中,需要自动化测试,通常需要很多Relay去切换不同的配置去测量不同的参数,在这里瑞萨给出了测试参考电路.如图1所示. 图1:直流关键参数测试电路 Re…

近期分享学习心得4

1、带有多的条件的if的语句 逻辑 || 的简写 if (x true || x 2523 || x 小明) {}// 简化操作if ([true, 2523, 小明].includes(x)) {}2、查找两个数组的交集 var numOne [0, 2, 4, 6, 8, 8]; var numTwo [1, 2, 3, 4, 5, 6]; var cross [...new Set(numOne)].filter(item…

【树莓派】如何刷个系统给树莓派4B,如何ssh登陆到树莓派

文章目录 下载树莓派镜像下载烧写软件烧写编辑设置连接树莓派4B重启ssh查看树莓派IPssh远程连接问询、帮助 下载树莓派镜像 https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit 下载烧写软件 https://www.raspberrypi.com/software/ 烧写 编辑…

python使用redis存储时序数据

import redisdef ts_demo():"""时序数据存储RedisTimeSeries测试"""# 连接到Redisr redis.Redis(hostlocalhost, password"xxxx", port63790, db0)r1 r.ts()# print(r1.get("ts_key"))# print(r.exists(ts_key))# # 清空键…

【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程

文章目录 前言安装教程使用教程 前言 JavaScript文件可能会泄露敏感信息&#xff0c;如注释中的机密信息、内部IP地址&#xff0c;以及包含未授权访问或其他漏洞的URL。手动检查这些信息效率低下&#xff0c;而该工具——LinkFinder&#xff0c;可用于自动收集JavaScript文件中…

CefSharp.WinForms模拟登录

一、新建Web项目 {ViewData["Title"] "Home Page";Layout null; } <script src"~/lib/jquery/dist/jquery.min.js"></script> <script src"~/lib/jquery/dist/jquery.js"></script> <head><scrip…

FairAdaBN论文速读

FairAdaBN: Mitigating Unfairness with Adaptive Batch Normalization and Its Application to Dermatological Disease Classification 摘要 深度学习在医疗研究和应用中变得越来越普遍&#xff0c;同时涉及敏感信息和关键诊断决策。研究人员观察到不同人口统计属性子组之间…

变频器基础原理

文章目录 0. 基本知识1.三相的电压之和为02.正弦交流相量的相量表示法(相量只是表示正弦量&#xff0c;而不等于正弦量 &#xff1b;只有正弦量才能用相量表示)引入相量表示法目的:一种正弦量的产生方式:正弦量的相量表示&#xff0c;使用欧拉公式表示复数 3.用复数表示正弦量&…

基于SpringBoot + Vue实现的医护人员排(值)班系统设计与实现+毕业论文+开题报告

项目介绍 本医护人员排班系统包括管理员&#xff0c;医护。 管理员功能有个人中心&#xff0c;医院信息管理&#xff0c;医护信息管理&#xff0c;医护类型管理&#xff0c;排班信息管理&#xff0c;排班类型管理&#xff0c;科室信息管理&#xff0c;投诉信息管理。 医护人员…