ES6.2.3 restClient API 高亮搜索

ES6.2.3  restClient API 高亮搜索 


话不多说,直接上demo :


package com.test;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
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 com.alibaba.fastjson.JSON;
import com.bean.RecogcardInfo;
import com.common.ESClientFactory;


public class HighLightTest {


public static void main(String[] args) {

String searchKey = "李四";

    RestHighLevelClient restClient = ESClientFactory.getHighLevelClient();

        关于restClient 的创建 点击 :RestHighLevelClient

    //指定索引库类型
SearchRequest searchRequest = new SearchRequest("index_recogcardinfo").types("doc"); 

try {

    //搜索体(可以添加多个搜索参数
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(searchKey);
            queryBuilder.field("address").field("name");
            //构建高亮体
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("<span style=\"color:red\">");
            highlightBuilder.postTags("</span>");
            //高亮字段
            highlightBuilder.field("address").field("name");
            //搜索体(添加多个搜索参数)
            searchSourceBuilder.highlighter(highlightBuilder);
            searchSourceBuilder.query(queryBuilder);
            searchRequest.source(searchSourceBuilder);
            searchSourceBuilder.from(page.getPageNum()).size(page.getPageSize());
            //执行查询
SearchResponse response = restClient.search(searchRequest);
//获取搜索的文档结果
SearchHits hit = response.getHits();
SearchHit[] hits = hit.getHits();

for (SearchHit searchHit : hits) {
//将文档中的每一个对象转换json串值
String sourceAsString = searchHit.getSourceAsString();
//将json串值转换成对应的实体对象
RecogcardInfo recogcardInfo = JSON.parseObject(sourceAsString, RecogcardInfo.class);
//获取对应的高亮域
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
//高亮字段
HighlightField highlightAddress = highlightFields.get("address");
if(highlightAddress!=null){
                    // 为title串值增加自定义的高亮标签
    Text[] titleTexts = highlightAddress.fragments();
                    String address = "";
                    for (Text text : titleTexts) {
                    address += text;
                    }
                    //将追加了高亮标签的串值重新填充到对应的对象
                    recogcardInfo.setAddress(address);
}

HighlightField highlightName = highlightFields.get("name");
if(highlightName!=null){
Text[] titleTexts = highlightName.fragments();
                    // 为title串值增加自定义的高亮标签
                    String name = "";
                    for (Text text : titleTexts) {
                    name += text;
                    }
                    //将追加了高亮标签的串值重新填充到对应的对象
                    recogcardInfo.setName(name);
}
list.add(recogcardInfo);
System.out.println("list:"+list.toString());
}

} catch (IOException e) {
e.printStackTrace();
}
}

}


后记:写这些东西只是为了让给自己做个记录,希望自己能理解的更深刻。如果你看到了这篇博文希望能对你有那么一点帮助,关于里面的注解只是我自己的理解,不正确的地方,请指出

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值