elasticsearch高亮查询

package com.zhangxiangzhou.cms.redis;
import java.util.ArrayList;
import java.util.List;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.SearchResultMapper;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mchange.v2.sql.filter.SynchronizedFilterDataSource;
import com.zhangxiangzhou.cms.domain.Article;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {“classpath:applicationContext-es.xml”})
public class ElasticsearchHight {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
//分页查询
@Test
public void testSelectPage() {
//创建Pageable对象
Pageable pageable = PageRequest.of(0, 3,Sort.by(Sort.Direction.ASC,“id”));
//创建search对象
SearchQuery query = new NativeSearchQueryBuilder().withPageable(pageable).build();
//执行分页查询
AggregatedPage

pageInfo = elasticsearchTemplate.queryForPage(query, Article.class);
}

//带条件的分页查询
@Test
public void testSelectPageByid() {
    //创建Pageable对象
    Pageable pageable = PageRequest.of(0, 3,Sort.by(Sort.Direction.ASC,"id"));
    //查询内容的字体
    String content = "游";
    //查询具体的字段
    String fieldNames[]= {"title"};
    //创建queryBuilder查询条件
    QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(content, fieldNames);
    //创建search对象
    SearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(pageable).build();
    //执行分页查询
    AggregatedPage
pageInfo = elasticsearchTemplate.queryForPage(query, Article.class); } //多个条件的分页查询 @Test public void testSelectPageByidByName() { //创建Pageable对象 Pageable pageable = PageRequest.of(0, 3,Sort.by(Sort.Direction.ASC,"id")); //查询内容的字体 String content = "游"; //查询具体的字段 String fieldNames[]= {"title","content"}; //创建queryBuilder查询条件 QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(content, fieldNames); //创建search对象 SearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(pageable).build(); //执行分页查询 AggregatedPage
pageInfo = elasticsearchTemplate.queryForPage(query, Article.class); } //多个条件的分页查询并且高亮查询 @Test public void testSelectPageByidByNameHight() { //创建Pageable对象 Pageable pageable = PageRequest.of(0, 3,Sort.by(Sort.Direction.ASC,"id")); //高亮拼接的前缀 String preTags=""; //高亮拼接的后缀 String postTags=""; //查询内容的字体 String content = "华"; //查询具体的字段 String fieldNames[]= {"title","content"}; //创建queryBuilder查询条件 QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(content, fieldNames); //创建search对象 SearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder).withHighlightFields( new HighlightBuilder.Field(fieldNames[0]).preTags(preTags).postTags(postTags), new HighlightBuilder.Field(fieldNames[1]).preTags(preTags).postTags(postTags) ).withPageable(pageable).build(); //执行分页查询 AggregatedPage
pageInfo = elasticsearchTemplate.queryForPage(query, Article.class, new SearchResultMapper() { @Override public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { //定义查询出来内容存储的集合 List
content = new ArrayList<>(); //获取高亮的结果 SearchHits searchHits = response.getHits(); if(searchHits!=null) { //获取高亮中所有的内容 SearchHit[] hits = searchHits.getHits(); if(hits.length > 0) { for (SearchHit hit : hits) { Article article = new Article(); //高亮结果的id值 String id = hit.getId(); //存入实体类 article.setId(Integer.parseInt(id)); //获取第一个字段的高亮内容 HighlightField highlightField1 = hit.getHighlightFields().get(fieldNames[0]); if(highlightField1 != null) { //获取第一个字段的值并封装给实体类 String hight_value1 = highlightField1.getFragments()[0].toString(); article.setTitle(hight_value1); }else { //获取原始的值 String value = (String) hit.getSourceAsMap().get(fieldNames[0]); article.setTitle(value); } HighlightField highlightField2 = hit.getHighlightFields().get(fieldNames[1]); if(highlightField2 != null) { //获取第二个字段的值并封装给实体类 String hight_value2 = highlightField2.getFragments()[1].toString(); article.setTitle(hight_value2); }else { //获取原始的值 String value2 = (String) hit.getSourceAsMap().get(fieldNames[1]); article.setTitle(value2); } content.add(article); } } } return new AggregatedPageImpl<>((List)content); } }); System.out.println(pageInfo+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); List
list = pageInfo.getContent(); if(list!=null) { list.forEach(System.out::print); } }

}

你可能感兴趣的:(elasticsearch高亮查询)