zoukankan      html  css  js  c++  java
  • 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     }

    测试结果:

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/guoxiangyue/p/11195433.html
Copyright © 2011-2022 走看看