ES中常用的Query和查询作用,以及SpringBoot使用实例

ES中常用的Query和查询作用,以及 SpringBoot 使用实例

文章目录

  • ES中常用的Query和查询作用,以及 SpringBoot 使用实例
      • MatchAllQuery
      • TermQuery
      • BoolQuery
      • RangeQuery
      • MatchQuery
      • MultiMatchQuery
      • TermsQuery
      • PrefixQuery
      • WildcardQuery
      • RegexpQuery
      • FuzzyQuery
      • DisMaxQuery
      • ExistsQuery
      • GeoDistanceQuery
      • 查询文档总数

MatchAllQuery

  • 作用:匹配索引中的所有文档。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void matchAllQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchAllQuery());SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);for (SearchHit<YourDocumentType> hit : searchHits.getSearchHits()) {YourDocumentType document = hit.getContent();// 处理文档}
}

TermQuery

  • 作用:精确匹配字段的特定值,不会对查询词进行分词。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void termQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("fieldName", "exactValue"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

BoolQuery

  • 作用:组合多个查询条件,通过 must、should、mustNot 等逻辑来筛选文档。
  • Spring Boot 实例
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void boolQuery() {BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("field1", "value1")).should(QueryBuilders.termQuery("field2", "value2")).mustNot(QueryBuilders.termQuery("field3", "value3"));NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(boolQuery);SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

RangeQuery

  • 作用:查询字段值在指定范围内的文档,适用于数字、日期等类型字段。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void rangeQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.rangeQuery("age").gte(18).lte(60));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

MatchQuery

  • 作用:对输入文本分词后在指定字段进行全文检索。

  • Spring Boot 实例

import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void matchQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("fieldName", "searchText"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

MultiMatchQuery

  • 作用:在多个字段上执行与 MatchQuery 类似的全文检索。

  • Spring Boot 实例

import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void multiMatchQuery() {String[] fields = {"field1", "field2", "field3"};NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.multiMatchQuery("searchText", fields));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

TermsQuery

  • 作用:一次性查询字段的多个精确值。

  • Spring Boot 实例

import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void termsQuery() {List<String> values = new ArrayList<>();values.add("value1");values.add("value2");NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termsQuery("fieldName", values));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

PrefixQuery

  • 作用:查找字段值以指定前缀开头的文档。

  • Spring Boot 实例

import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void prefixQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.prefixQuery("fieldName", "prefixValue"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

WildcardQuery

  • 作用:使用通配符*?进行模糊查询。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void wildcardQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.wildcardQuery("fieldName", "wildcardValue*"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

RegexpQuery

  • 作用:通过正则表达式匹配字段值。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void regexpQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.regexpQuery("fieldName", "regexpPattern"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

FuzzyQuery

  • 作用:在一定编辑距离内查找与查询词相似的文档。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void fuzzyQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.fuzzyQuery("fieldName", "fuzzyValue"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

DisMaxQuery

  • 作用:将多个查询组合,取得分最高的作为文档得分。
  • Spring Boot 实例
import org.elasticsearch.index.query.DisMaxQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void disMaxQuery() {DisMaxQueryBuilder disMaxQuery = new DisMaxQueryBuilder().add(QueryBuilders.matchQuery("field1", "value1")).add(QueryBuilders.matchQuery("field2", "value2"));NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(disMaxQuery);SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

ExistsQuery

  • 作用:判断字段是否有值,有值的文档被匹配。
  • Spring Boot 实例
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void existsQuery() {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.existsQuery("fieldName"));SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

GeoDistanceQuery

  • 作用:查询位于指定地理坐标点一定距离范围内的文档。

  • Spring Boot 实例

import org.elasticsearch.index.query.GeoDistanceQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;@Autowired
private ElasticsearchOperations elasticsearchOperations;public void geoDistanceQuery() {GeoDistanceQueryBuilder geoQuery = QueryBuilders.geoDistanceQuery("location").point(37.7749, -122.4194).distance("10km");NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(geoQuery);SearchHits<YourDocumentType> searchHits = elasticsearchOperations.search(queryBuilder.build(), YourDocumentType.class);// 处理搜索结果
}

查询文档总数

以下是使用 Elasticsearch Java High Level REST Client 查询符合条件文档总数的示例代码:

import org.apache.http.HttpHost;
import org.elasticsearch.action.count.CountRequest;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import java.io.IOException;public class ElasticsearchCountExample {public static void main(String[] args) {// 创建RestHighLevelClient实例RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));try {// 创建CountRequest对象CountRequest countRequest = new CountRequest("your_index_name");// 设置查询条件,这里使用match查询作为示例countRequest.query(QueryBuilders.matchQuery("your_field_name", "your_search_term"));// 执行计数请求CountResponse countResponse = client.count(countRequest, RequestOptions.DEFAULT);long count = countResponse.getCount();System.out.println("符合条件的文档总数: " + count);} catch (IOException e) {e.printStackTrace();} finally {try {client.close();} catch (IOException e) {e.printStackTrace();}}}
}

在上述代码中,你需要将your_index_nameyour_field_nameyour_search_term替换为实际的值。此代码会执行计数请求并打印出符合条件的文档总数。

your_index_name 代表你要进行查询操作的具体索引名称。

your_field_name 表示你要在哪个字段上进行查询操作。比如在 products 索引中,可能会有 name 字段用于存储商品名称,price 字段用于存储商品价格,category 字段用于存储商品所属类别。

your_search_term:它指的是你在指定字段中要搜索的具体内容。例如,你想查找价格为 5000 的商品,那么 “5000” 就是搜索词;你想查找类别为 “服装” 的商品,“服装” 就是搜索词。

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

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

相关文章

Flutter 自定义插件基础

1、Flutter插件是什么&#xff1f;官方插件库 在开发Flutter应用过程中会涉及到平台相关接口调用&#xff0c;例如数据库操作、相机调用、外部浏览器跳转等业务场景。其实Flutter自身并不支持直接在平台上实现这些功能&#xff0c;而是通过插件包接口去调用指定平台API从而实现…

极狐GitLab 外部授权控制机制是怎样的?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部授权控制 (BASIC SELF) 在高度控制的环境中&#xff0c;访问策略可能需要由外部服务控制&#xff0c;该服务允许基于项目…

Linux系统之----冯诺依曼结构

1.简要描述 冯诺依曼体系结构是现代计算机的基本设计思想&#xff0c;其核心理念是将计算机的硬件和软件统一为一个整体&#xff0c;通过存储程序的方式实现计算。冯诺依曼体系结构的核心思想是通过存储程序实现自动计算&#xff0c;其五大部件协同工作&#xff0c;奠定了现代…

【八股】计算机网络

1 概述 1.1 网络的网络 网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。 1.2 ISP 互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联…

基于VS Code 为核心平台的python语言智能体开发平台搭建

以下是基于 VS Code 为核心平台&#xff0c;整合 Node-RED、Gradio、Docker Desktop 的智能体可视化开发平台优化方案&#xff0c;聚焦工具链深度集成与开发效率提升&#xff1a; 一、核心架构设计 #mermaid-svg-f8l9kYPAlJ2TlpGF {font-family:"trebuchet ms",verd…

STM32G0单片机自带RTC

STM32有个自带RTC外设&#xff0c;外接32.768KHz的晶振后可得到相对精确的计时功能。 实测了一个一小时快个1秒多。 1 cubeMX设置了RTC后自动生成的初始化代码如下 static void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 *//* USER CODE END RTC_Init 0 */RTC_TimeT…

细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法

目录 一、FreeRTOS任务管理API函数 1、任务管理API函数 2、获取任务的句柄 &#xff08;1&#xff09;函数xTaskGetCurrentTaskHandle() &#xff08;2&#xff09;函数xTaskGetIdleTaskHandle() &#xff08;3&#xff09;函数xTaskGetHandle() 3、单个任务的操作 &a…

星露谷物语 7000+ 大型MOD整合包

衣服美化、家具美化、地图美化、人物肖像美化 全地图装修存档、人物美化、扩展包、环境美化、家具、动植物、通用前置包、新增NPC、功能、服装发饰妆 帽子发型农场小镇美化大型玩法拓展实用功能mod 动漫人物形象MOD 地点/动物/地图/功能/机械/家具/建筑/界面美化/扩展/农场/食谱…

C++ `unique_ptr` 多线程使用

C unique_ptr 多线程使用 一、核心结论 操作同一个 unique_ptr&#xff1a;必须加锁&#xff08;所有权转移是非原子操作&#xff09;访问被管理对象&#xff1a;若对象非线程安全&#xff0c;仍需额外同步独立 unique_ptr 实例&#xff1a;不同线程操作不同实例时无需加锁 二…

Android audio系统六 AudioEffect音效加载

对于Android系统智能硬件设备&#xff0c;音效处理的实现方式有以下几种&#xff1a; AudioEffect – android系统音效处理 优点&#xff1a;纯软件实现&#xff0c;移植调试简单方便 缺点&#xff1a;cpu上运行&#xff0c;容易因为资源竞争而出现卡顿 DSP/ADSP – 数字信号处…

深度学习总结(21)

超越基于常识的基准 除了不同的评估方法&#xff0c;你还应该了解的是利用基于常识的基准。训练深度学习模型&#xff0c;你听不到也看不到。你无法观察流形学习过程&#xff0c;它发生在数千维空间中&#xff0c;即使投影到三维空间中&#xff0c;你也无法解释它。唯一的反馈…

接口自动化测试(二)

一、接口测试流程&#xff1a;接口文档、用例编写 拿到接口文档——编写接口用例以及评审——进行接口测试——工具/自动化框架进行自动化用例覆盖(70%)——输出测试报告 自动化的目的一般是为了回归 第一件事情&#xff1a;理解需求&#xff0c;学会看接口文档 只需要找到我…

Linux上位机开发实践(以MCU小系统入门嵌入式电路)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 一直都主张嵌入式软件工程师&#xff0c;也要会做一点电路设计的工作。哪怕自己做的是嵌入式linux上层开发&#xff0c;一个会硬件设计&#xff0c…

浏览器的存储机制 - Storage

浏览器的存储机制 - Storage 前言一、核心概念与区别二、常用 API1、存储数据&#xff08;setItem(key, value)&#xff09;2、 获取数据&#xff08;getItem(key)&#xff09;3、删除单个数据&#xff08;removeItem(key)&#xff09;4、清空所有数据&#xff08;clear()&…

考研单词笔记 2025.04.18

chance n机会&#xff0c;风险&#xff0c;冒险&#xff0c;可能性&#xff0c;巧合&#xff0c;意外a偶然的&#xff0c;意外的 opportunity n机会&#xff0c;时机 crisis n危机&#xff0c;危急关头 the economic crisis 经济危机 danger n危险&#xff0c;可能性&#…

第三方API——Spring Boot 集成阿里云短信发送功能

目录 一. 创建阿里云OSS服务并获取密钥&#xff0c;开通短信服务 1.1 注册阿里云服务器 1.2 开通短信服务 1.3 创建对象存储OSS服务 1.4 RAM用户授权短信权限 1.5 新增用户并授权用户短信权限 1.6 获取 AccessKey ID 和 AccessKey Secret 二. 创建项目集成短信发送 2.1…

b站PC网页版视频播放页油猴小插件制作

文章目录 前言需求分析实施观察页面起始渲染编码效果展示 总结 前言 新手上路,欢迎指导 需求分析 想要一个简约干净的界面,需要去除推荐栏和广告部分. 想要自由调节视频播放速率,需要在视频控制栏加一个输入框控制视频倍速 实施 观察页面起始渲染 因为要使用MutationObse…

畅游Diffusion数字人(27):解读字节跳动提出主题定制视频生成技术Phantom

畅游Diffusion数字人(0):专栏文章导航 前言:主题定制视频生成,特别是zero-shot主题定制视频生成,一直是当前领域的一个难点,之前的方法效果很差。字节跳动提出了一个技术主题定制视频生成技术Phantom,效果相比于之前的技术进步非常显著。这篇博客详细解读一下这一工作。 …

ESP8266简单介绍

ESP8266模块图如下 ESP8266的工作模式有三种 ESP8266支持STA、AP、STAAP三种工作模式 ①STA模式 &#xff08;ESP充当设备与路由器相连&#xff09; ②AP模式 &#xff08;ESP充当路由器&#xff09; ③APSTA&#xff08;上述两种模式兼具&#xff09; AT指令介绍 使用安…

DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析

随着大模型技术的迅猛发展&#xff0c;国产模型正逐渐崭露头角&#xff0c;尤其是DeepSeek-R3的发布&#xff0c;更是在AI技术社区中引起广泛关注。而与此同时&#xff0c;国际领先的GPT-4o和Claude-3.5-Sonnet也在不断迭代升级&#xff0c;持续刷新业界对AI能力的认知。下文将…