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

Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程ES(四)查询、排序、分页、高亮

基础代码

package com.test.xulk;import com.alibaba.fastjson.JSON;
import com.test.xulk.es.esdoc.HotelDoc;
import com.test.xulk.es.service.IHotelService;
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.CollectionUtils;import java.io.IOException;
import java.util.Map;/*** 高级查询*/
@SpringBootTest
class HotelSearchTest {private RestHighLevelClient client;@Autowiredprivate IHotelService hotelService;// 快捷键  alt + inster  选择第二个 SetUp方法// 初始化 client@BeforeEachvoid setUp() {// // HttpHost.create("http://127.0.0.1:9200") // 若果是集群就配置多个this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://127.0.0.1:9200")));}// 销毁@AfterEachvoid tearDown() throws IOException {client.close();}}

match_all查询

语法

代码示例

    // 文档查询@Testvoid testSearchMatchAll() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchAllQuery());SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();System.out.println(" ----------------// " + total);for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);System.out.println(" ====================================== ");System.out.println(" *********************** " + JSON.toJSONString(hit));}}

match查询

 // match 单字段 / 多字段 查询文档@Testvoid testSearchMatch() throws IOException {SearchRequest request = new SearchRequest("hotel");
//        request.source().query(QueryBuilders.matchQuery("all","如家"));request.source().query(QueryBuilders.multiMatchQuery("如家","name","business"));SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();System.out.println(" ----------------// total " + total);for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);System.out.println(" ====================================== ");System.out.println(" *********************** " + JSON.toJSONString(hit));}}

精确查询

// 精确查询 term查询和range查询@Testvoid testSearchtermQuery() throws IOException {SearchRequest request = new SearchRequest("hotel");
//        request.source().query(QueryBuilders.termQuery("city","北京")); // 精准查询request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(200));  // 区经查询SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();System.out.println(" ----------------// total " + total);for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);System.out.println(" ====================================== ");System.out.println(" *********************** " + JSON.toJSONString(hit));}}

布尔查询

// 布尔查询@Testvoid testSearchBoolQuery() throws IOException {// 1.准备RequestSearchRequest request = new SearchRequest("hotel");// 2.准备DSL// 2.1.准备BooleanQueryBoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// 2.2.添加termboolQuery.must(QueryBuilders.termQuery("city", "北京"));// 2.3.添加rangeboolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));request.source().query(boolQuery);SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();System.out.println(" ----------------// total " + total);for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);System.out.println(" ====================================== ");System.out.println(" *********************** " + JSON.toJSONString(hit));}}

排序分页

    // 排序@Testvoid testSearchSort() throws IOException {// 1.准备RequestSearchRequest request = new SearchRequest("hotel");SearchSourceBuilder source = request.source();source.query(QueryBuilders.matchAllQuery());source.sort("price", SortOrder.DESC);SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;System.out.println(" ----------------// total " + total);for (SearchHit hit : searchHits.getHits()) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);}}

// 分页@Testvoid testSearchLimit() throws IOException {// 页码,每页大小int page = 1, size = 5;// 1.准备RequestSearchRequest request = new SearchRequest("hotel");// 2.准备DSL// 2.1.queryrequest.source().query(QueryBuilders.matchAllQuery());// 2.2.排序 sortrequest.source().sort("price", SortOrder.ASC);// 2.3.分页 from、sizerequest.source().from((page - 1) * size).size(5);SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;System.out.println(" ----------------// total " + total);for (SearchHit hit : searchHits.getHits()) {String sourceAsString = hit.getSourceAsString();System.out.println(" --------------------------- " + sourceAsString);}}

高亮

 

// 高亮@Testvoid testHighlight() throws IOException {// 1.准备RequestSearchRequest request = new SearchRequest("hotel");// 2.准备DSLrequest.source().query(QueryBuilders.matchQuery("all","如家"));request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));SearchResponse search = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = search.getHits();long total = searchHits.getTotalHits().value;System.out.println(" ----------------// total " + total);for (SearchHit hit : searchHits.getHits()) {String json = hit.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);Map<String, HighlightField> highlightFields = hit.getHighlightFields();if(!CollectionUtils.isEmpty(highlightFields)){HighlightField highlightedField  = highlightFields.get("name");if(highlightedField != null){String name = highlightedField.getFragments()[0].string();hotelDoc.setName(name);}}System.out.println("  hotelDoc ===== :  " +  hotelDoc);}}

http://www.xdnf.cn/news/1030465.html

相关文章:

  • 打卡Day53
  • 2025虚幻5蓝图编辑器的细节面板调不出来
  • MySQL-DQL数据查询语句深度解析与实战指南
  • 使用docker中的ollama
  • Python实战应用-Python操作MySQL数据库
  • 雪豹速清APP:高效清理,畅享流畅手机体验
  • python打卡day53@浙大疏锦行
  • DAY 53 对抗生成网络
  • 操作系统知识(1)
  • 造轮子系列:从0到1打造生产级HTTP客户端,优雅封装OkHttp/HttpClient,支持异步、重试与文件操作
  • 自定义表单右侧属性使用v-bind绑定渲染
  • 知识点|MVC模式(Model–view–controller)
  • 中英双配毕业祝福(毕业季快乐!)
  • MRI中的“髓鞘探测器”:T1w/T2w比值揭秘
  • 【面板数据】A股上市公司注册地所在地数据集(1991-2023年)
  • securecrt里如何把会话管理器固定在会话的左侧?
  • 北航自由指令驱动的多模态导航最新研究:OctoNav:开启通用智能体具身导航
  • SageAttention2原理和计算过程
  • 开机不用输入密码,修改注册表
  • 【设计模式】UML类图与工厂模式
  • C++中 using 命名别名和命名别名模板的用法
  • 寻找区域中的面积和中心点
  • ChatNT-用于DNA、RNA和蛋白质任务的多模态对话代理-文献精读143
  • P3740 [HAOI2014] 贴海报 题解
  • AUTOSAR图解==>AUTOSAR_TPS_SafetyExtensions
  • xss注入遇到转义,html编码绕过了解一哈
  • frp搭建踩坑....
  • 2025软件测试面试题汇总(接口测试篇)
  • 鸿蒙的@State
  • 跳出多重循环