ES搜索高亮分詞排序聚合搜索

来源:https://www.cnblogs.com/reverseapplepie/archive/2022/10/11/16779243.html
-Advertisement-
Play Games

分詞高亮搜索代碼 List<A> list = new ArrayList<>(); //設置高亮顯示 HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false); hi ...


分詞高亮搜索代碼

List<A> list = new ArrayList<>();
//設置高亮顯示
HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>");

QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(keyword);
queryBuilder.field("分詞欄位");

//搜索
SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch(PublicConst.MT_LAW_INDEX_NAME)
	.setFrom(開始條數)
	.setSize(獲取多少條)
	.setTypes(數據所在type)
	.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
	.setQuery(queryBuilder)
	.highlighter(highlightBuilder)
	.setExplain(true); //設置是否按查詢匹配度排序
SearchResponse searchResponse = searchRequestBuilder.get();
//獲取搜索結果
SearchHits searchHits = searchResponse.getHits();
SearchHit[] hits = searchHits.getHits();
page.setTotal(searchHits.totalHits);
// 迴圈搜索結果
if (hits != null && hits.length != 0) {
	for (SearchHit hit : hits) {
		Map<String, HighlightField> highlightFields = hit.getHighlightFields();
		Map<String, Object> source = hit.getSource();
		//處理高亮 獲取高亮字元串
		if (highlightFields != null && highlightFields.size() != 0) {
			HighlightField titleField = highlightFields.get("content");
			if (titleField != null) {
				Text[] fragments = titleField.fragments();
				if (fragments != null && fragments.length != 0) {
					StringBuilder name = new StringBuilder();
					for (Text text : fragments) {
						name.append(text);
					}
					// 高亮設置完欄位
					source.put("contentkey", name.toString());
				}
			}
		}
		// 組織返回對象
		orderModel = new A();
		orderModel.setId(Long.parseLong(source.get("id").toString()));
		orderModel.setContent(source.get("content").toString());
		orderModel.setCode(source.get("code").toString());
		list.add(orderModel);
	}
}

普通搜索

List<A> list = new ArrayList<>();
SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch(PublicConst.MT_LAW_INDEX_NAME);
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("精確匹配欄位", "匹配的值");
searchRequestBuilder = searchRequestBuilder.setQuery(QueryBuilders.boolQuery().must(termQueryBuilder))
	.setFrom(分頁開始)
	.setSize(取多少個)
	.addSort("排序欄位", SortOrder.ASC);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
//獲取搜索結果
SearchHits searchHits = searchResponse.getHits();
page.setTotal(searchHits.totalHits);
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
	Map<String, Object> source = hit.getSource();
	A orderModel = new A();
	orderModel.setId(Long.parseLong(source.get("id").toString()));
	orderModel.setContent(source.get("content").toString());
	orderModel.setCode(source.get("code").toString());
	list.add(orderModel);
}

聚合搜索

List<A> resList = new ArrayList<>();
//封裝了獲取RestHighLevelClient的方法
Client client = elasticsearchTemplate.getClient();
// 查詢的索引
SearchRequest request = new SearchRequest("zuolin_mt_law_hotlaw");
// 構建查詢
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 設置查詢結果的一個別名隨便起 , 還有需要聚合的欄位(設置一個桶)
searchSourceBuilder.aggregation(AggregationBuilders.terms("classroom_term").field("hotkey"));
request.source(searchSourceBuilder);
ActionFuture<SearchResponse> search = client.search(request);
//獲取數據時首先對classroom分桶 , 如果前面設置多個欄位分組(多個桶) , 這裡需要嵌套for迴圈來獲取
Terms classroomTerm = search.get().getAggregations().get("classroom_term");
for (Terms.Bucket classroomBucket : classroomTerm.getBuckets()) {
	System.out.println("classRoom:" + classroomBucket.getKeyAsString() + "count:" + classroomBucket.getDocCount());
	A temp = new A();
	temp.setHotkey(classroomBucket.getKeyAsString());
	temp.setCount(Long.toString(classroomBucket.getDocCount()));
	resList.add(temp);
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • springboot結合redis做緩存,在@Cacheable中使用如下SpEL時報錯。 @Cacheable(cacheNames = ENTERPRISE_CACHE_KEY, key = "#{T(com.emax.common.RestApiSignUtil).foo(#root.args ...
  • MyBatisPlus 快速入門 1.創建資料庫mybatisplus 2.創建user表並插入數據 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主鍵ID', name VARCHAR( ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~ 所以特地給大家獻上如何用Python來開發一款看視頻不需要VIP的軟體~ 如果想發給朋友用的話,咱們在打包成exe可執行軟體,這樣小伙伴也能一起用了~ 效果展示 這是本次要寫的界面 優、騰、愛三個主流的都可以,其它的我沒試,直 ...
  • 多數ARK反內核工具中都存在驅動級別的記憶體轉存功能,該功能可以將應用層中運行進程的記憶體鏡像轉存到特定目錄下,記憶體轉存功能在應對加殼程式的分析尤為重要,當進程在記憶體中解碼後,我們可以很容易的將記憶體鏡像導出,從而更好的對樣本進行分析,當然某些加密殼可能無效但絕大多數情況下是可以被轉存的。 ...
  • jpa整合mybatis模板解析、hibernate整合mybatis模板解析 jpa是hibernate的封裝,主要用於spring全家桶套餐。 hibernate難以編寫複雜的SQL。例如一個訂單查詢,查詢條件有時間緯度、用戶緯度、狀態緯度、搜> 索、分頁........... 等等。正常開發你 ...
  • 一 前期工作 環境:python3.6,1080ti,pytorch1.10(實驗室伺服器的環境😂😂) 1.設置GPU或者cpu import torch import torch.nn as nn import matplotlib.pyplot as plt import torchvisi ...
  • 1.基於 Logistic 回歸和 Sigmoid 函數的分類 邏輯回歸適合於01情況的分類就是描述一個問題是或者不是,所以就引入sigmoid函數,因為這個函數可以將所有值變成0-1之間的一個值,這樣就方便算概率 首先我們可以先看看Sigmoid函數(又叫Logistic函數)將任意的輸入映射到了 ...
  • map()函數可以對一個數據進行同等迭代操作。 例如: def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(r)) map函數傳入的第一個參數就是函數本身,即f。第二個參數是要操作的數據 map() 作為 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...