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.pswp.cn/bicheng/84944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84944.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個數組樣式上要分成兩個

如圖所示&#xff0c;要有一個區分來顯示&#xff0c;如果一開始就是這樣還可以有很多種處理方式&#xff0c;但是這個后期一直在調整所以不好重做因為開發已經完成&#xff0c;加上很多地方聯動改的地方太多&#xff0c;所以采用了一個比較笨的方法 <ul class"classif…

NLP進化史:從規則模板到思維鏈推理,七次范式革命全解析

“語言不是神的創造物&#xff0c;而是平凡人類的產物。”——諾姆喬姆斯基 自然語言處理&#xff08;NLP&#xff09;的發展史&#xff0c;就是人類試圖教會機器理解語言本質的探索史。本文將帶您穿越70年技術長河&#xff0c;揭示NLP領域關鍵的范式轉換里程碑。 一、規則驅動…

Yarn與NPM緩存存儲目錄遷移

Yarn與NPM緩存存儲目錄遷移 背景與需求 解釋Yarn和NPM緩存機制的作用及默認存儲路徑遷移緩存目錄的常見原因&#xff08;如磁盤空間不足、系統盤性能優化、多項目協作需求&#xff09; Yarn緩存目錄遷移方法 查看當前Yarn緩存目錄的命令&#xff1a;yarn cache dir修改Yarn…

Python爬蟲-批量爬取快手視頻并將視頻下載保存到本地

前言 本文是該專欄的第80篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文筆者以快手為例子,基于Python爬蟲來實現批量采集視頻,并將視頻下載以及保存到本地。 而具體的“視頻采集以及視頻下載,保存”思路邏輯,筆者將在正文中結合“完整代碼”來詳細介紹每個步驟。…

org.springframework.cloud.openfeign 組件解釋

我們來詳細解釋一下 org.springframework.cloud.openfeign 這個組件。 一句話概括&#xff1a;它是一個聲明式的、模板化的HTTP客戶端&#xff0c;旨在讓微服務之間的REST API調用變得像調用本地方法一樣簡單。 為了讓你徹底理解&#xff0c;我會從以下幾個方面來解釋&#x…

2025年06月13日Github流行趨勢

項目名稱&#xff1a;awesome-llm-apps 項目地址url&#xff1a;https://github.com/Shubhamsaboo/awesome-llm-apps項目語言&#xff1a;Python歷史star數&#xff1a;37,536今日star數&#xff1a;1,287項目維護者&#xff1a;Shubhamsaboo, Madhuvod, libw0430, AndrewHoh, …

Go語言底層(五): 深入淺出Go語言的ants協程池

在 Go 語言中&#xff0c;goroutine 的輕量特性使得高并發編程變得異常簡單。然而&#xff0c;隨著并發量的增加&#xff0c;頻繁創建對象和無限制啟動 goroutine 也可能帶來內存浪費、GC 壓力和資源搶占等問題。為了解決這些隱患&#xff0c;協程池成為常用的優化手段。用于控…

React Native【實戰范例】網格導航 FlatList

import React from "react"; import {FlatList,Image,SafeAreaView,StyleSheet,Text,View, } from "react-native"; interface GridItem {id: string;title: string;imageUrl: string; } // 網格布局數據 const gridData Array.from({ length: 30 }, (_, …

KJY0047-J1階段測試

KJY0047 - J1階段測試題解 題目1&#xff1a;SYAP0001. 闖關 解題思路&#xff1a; 暴力思路&#xff1a;每次碰到奇數都使用一次 f o r for for 循環將后續的數值 1 1 1, 時間復雜度 O ( n 2 ) O(n^2) O(n2) 優化思路&#xff1a;可以用一個計數器 c n t cnt cnt 來存…

鍵盤按鍵枚舉 Key 說明文檔

鍵盤按鍵枚舉 Key 說明文檔 該文檔介紹了 Key 枚舉中定義的鍵盤按鍵常量及其對應編號&#xff0c;適用于標準 105 鍵的美式鍵盤布局。常用于瀏覽器或桌面端的鍵盤事件監聽、游戲開發、快捷鍵映射等場景。 electron-jest ?? 功能鍵&#xff08;Function Keys&#xff09; …

函數調用過程中的棧幀變化

int add(int a, int b) {int c a b;return c; }int main() {int result add(1, 2);return 0; }生成匯編代碼&#xff1a;g -S Cplus.cpp -o Cplus.s .file "Cplus.cpp".text.globl _Z3addii.def _Z3addii; .scl 2; .type 32; .endef.seh_proc _Z3addii _Z3addii:p…

【Java面試筆記:實戰】41、Java面試核心考點!AQS原理及應用生態全解析

引言:AQS在Java并發體系中的核心地位 AQS(AbstractQueuedSynchronizer)作為Java并發包的底層基石,是理解ReentrantLock、Semaphore等同步工具的關鍵。 在Java架構師面試中,AQS的原理與應用是高頻考點,掌握其核心機制對理解JUC包和構建高并發系統至關重要。 本文將從原…

碩士課題常用命令

ros常用命令&#xff1a; 1.環境變量刷新 source devel/setup.bash2.ROS_INFO的信息在終端顯示為亂碼或者問號&#xff0c;則在main函數中加入&#xff1a; setlocale(LC_ALL, "");3.刷新bashrc文件 source ~/.bashrcPX4 roslaunch px4 mavros_posix_sitl.launc…

2.6 激光雷達消息格式

新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_simple.launch 在新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_rviz.launch 顯示/Scan話題消息&#xff0c;后面的參數是noarr無數組&#xff0c;防止刷屏 rostopic echo /scan --noarr 參考官…

常見的網絡協議有哪些

1.應用層 1.1 HTTP/HTTPS 前端與服務器通信的基礎協議&#xff0c;用于傳輸 HTML、CSS、JS、圖片等資源。 1.2WebSocket&#xff08;如社交聊天、股票實時報價、視頻會議、在線教育等&#xff09; WebSocket協議建立在TCP協議之上&#xff0c;實現了瀏覽器與服務器之間的實時…

Prometheus + Grafana 監控 RabbitMQ 實踐指南

文章目錄 Prometheus Grafana 監控 RabbitMQ 實踐教程一、前言二、環境搭建2.1 環境準備2.2 安裝 Prometheus2.3 安裝 Grafana 三、集成 RabbitMQ Exporter3.1 下載 RabbitMQ Exporter3.2 解壓文件3.3 配置環境變量3.4 啟動 RabbitMQ Exporter3.6 驗證 Exporter 狀態 四、Prom…

Babylon.js場景加載器(Scene Loader)使用指南

在3D開發中&#xff0c;Babylon.js的場景加載器(Scene Loader)是加載各種3D模型格式的核心工具。本文將詳細介紹如何高效使用Scene Loader加載多種格式的3D模型文件。 一、基本概念與支持格式 要加載特定類型的文件&#xff0c;Babylon.js需要先注冊對應的文件類型插件。目前…

編程學習網站大全(C++/OpenCV/QT方向)—— 資源導航與深度評測

工欲善其事&#xff0c;必先利其器 本文系統整理了C、OpenCV、QT三大方向的優質學習網站&#xff0c;結合技術特點與平臺優勢&#xff0c;助你精準選擇學習資源&#xff0c;少走彎路&#xff01; 一、C 學習網站精選 &#x1f4da; 1. cppreference.com 權威性最高&#xff1a…

逆向入門(5)程序逆向篇-AD_CM#2

打開程序 常規注冊界面&#xff0c;打開OD&#xff0c;隨便找找就看到關鍵字了 沒有殼邏輯也挺簡單的 獲取輸入框&#xff0c;用5比較輸入內容的長度&#xff0c;小于則跳轉提示密碼長度不夠 否則就進入下一個流程&#xff0c;去獲取序列號&#xff0c;其實可以直接將jnz換…

OD 算法題 B卷【路燈照明II】

文章目錄 路燈照明II 路燈照明II 在一條筆直的公路上安裝了N個路燈&#xff0c;從位置0開始安裝&#xff0c;間距固定為100米&#xff1b;每個路燈都有自己的照明半徑&#xff0c;計算第一個路燈和最后一個路燈之間&#xff0c;無法照明的區間長度和&#xff1b; 輸入描述: 第…