查詢結果高亮顯示

一.邏輯

1.設置高亮的配置:

(1)設置高亮顯示的字段

(2)設置高亮顯示的前綴

(3)設置高亮顯示的後綴

2.在client對象執行查詢之前,設置高亮顯示的信息【通知】。

3.遍歷結果列表時可以從結果中取高亮結果。

二.代碼塊

package cn.demo04;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
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.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;

public class StringHighLine {
    @Test
    /*
    根據分頁設置進行查詢
     */
    public void testStringHighLine()throws Exception{
//        1創建一個Settings對象,相當於一個配置信息。主要配置集羣名稱。
        Settings settings = Settings.builder()
                //put參數1是配置名稱,參數2是配置值
                .put("cluster.name","my-elasticsearch")
                .build();
//        2創建一個客戶端Client對象。
        TransportClient client = new PreBuiltTransportClient(settings);
        //2.2 獲取集羣的節點列表
        //2.2.1 參數1是InetAddress.getByName獲取ip地址(PPT方式),參數二是端口號(節點對外的端口),而不是服務端口號
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3.創建一個查詢對象,可以使用QueryBuilders工具類創建QueryBuilder對象。
        QueryBuilder queryBuilder = QueryBuilders
                .queryStringQuery("文檔對象2")//根據字符串進行創建QueryBuilder對象
                .defaultField("title");//設置默認搜索域【field】
//        4.使用client執行查詢。
        //4.1創建一個HighlightBuilder
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        //設置高亮的前綴,域,後綴
        highlightBuilder.field("title");//域【field】
        highlightBuilder.preTags("<em>");//前綴
        highlightBuilder.postTags("</em>");//後綴

        //4.2添加一個高亮設置
        SearchResponse searchResponse = client.prepareSearch("index_hello")//查詢的索引庫
                .setTypes("article")//查詢的type
                .setQuery(queryBuilder)//查詢條件
                .setFrom(0)//設置起始頁
                .setSize(5)//設置每頁顯示的記錄數

                .highlighter(highlightBuilder)//設置關鍵詞高亮

                .get();//執行查詢
//        5.得到查詢的結果集。
        SearchHits hits = searchResponse.getHits();
//        6.取查詢結果的總記錄。
        System.out.println("查詢結果的總記錄:" + hits.getTotalHits());
//        7.取查詢結果列表。
        //7.1獲取查詢結果的迭代器
        Iterator<SearchHit> iterator = hits.iterator();
        //7.2遍歷迭代器
        while(iterator.hasNext()){
            SearchHit searchHit = iterator.next();
            System.out.println("------------獲取字符串形式的文檔對象數據---------");
            System.out.println("查詢的結果爲:" + searchHit.getSourceAsString());
            System.out.println("--------獲取文檔的屬性---------");
            Map<String, Object> document = searchHit.getSource();//獲取map集合
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("context"));
            //獲取高亮的結果集合
            Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
            System.out.println(highlightFields);
            HighlightField field = highlightFields.get("title");//通過鍵名取出高亮的值,鍵爲指的域名【field】
            Text[] fragments = field.getFragments();//返回的高亮結果集是數組,需要進行遍歷
            if(fragments != null){
                String fragment = fragments[0].toString();
                System.out.println("高亮部分的鍵爲title,值爲" + fragment);
            }

        }
//        8.關閉client對象。
        client.close();
    }

}

三.範例

圖片

圖片

圖片

四.源碼

Elasticsearch.rar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章