ElasticSearch(十三):Spring Data ElasticSearch 的使用(三)——NativeSearchQuery 高亮查询
在Elasticsearch的实际应用中,经常需要将匹配到的结果字符进行高亮显示,此处采取NativeSearchQuery原生查询的方法,实现查询结果的高亮显示。
1 /**
2 * 高亮查询
3 */
4 @Test
5 public void testNativeSearchQuery(){
6 String fild="content";
7 NativeSearchQuery nativeSearchQuery=new NativeSearchQueryBuilder()
8 .withQuery(QueryBuilders.queryStringQuery("黄").defaultField(fild))
9 .withHighlightFields(new HighlightBuilder.Field(fild))
10 .build();
11 AggregatedPage<Film> list = elasticsearchTemplate.queryForPage(nativeSearchQuery, Film.class, new SearchResultMapper() {
12 @Override
13 public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
14 List<Film> films = new ArrayList<>();
15 SearchHits hits = response.getHits();
16 for (SearchHit hit:hits){
17 if(hits.getHits().length<=0){
18 return null;
19 }
20 Film film=new Film();
21 String hightLightMessage = hit.getHighlightFields().get(fild).fragments()[0].toString();
22 film.setId(Long.parseLong(hit.getId()));
23 film.setTitle(hit.getSource().get("title").toString());
24 film.setContent(hit.getSource().get("content").toString());
25 film.setDirector(hit.getSource().get("director").toString());
26 film.setPrice(hit.getSource().get("price").toString());
27 film.setDate(hit.getSource().get("date").toString());
28
29 try {
30 String setMethodName = parSetName(fild);
31 Class<? extends Film> filmClass = film.getClass();
32 Method setMethod = filmClass.getMethod(setMethodName,String.class);
33 setMethod.invoke(film,hightLightMessage);
34 }catch (Exception e){
35 e.printStackTrace();
36 }
37 films.add(film);
38
39 }
40 if (films.size()>0){
41 return new AggregatedPageImpl<>((List<T>) films);
42 }
43 return null;
44 }
45 });
46 list.getContent().forEach(film -> System.out.println(film));
47 }
48
49
50
51 public String parSetName(String fieldName){
52 if (null == fieldName || "".equals(fieldName)) {
53 return null;
54 }
55 int startIndex = 0;
56 if (fieldName.charAt(0) == '_')
57 startIndex = 1;
58 return "set" + fieldName.substring(startIndex, startIndex + 1).toUpperCase()
59 + fieldName.substring(startIndex + 1);
60 }
测试结果:
标签:
ElasticSearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?