ElasticSearch使用Java客戶端實現對文檔的分頁和搜索詞高亮

public static void keyWordQuery() throws Exception {
        //連接對象
        TransportClient client = linkObject();
        //設置搜索條件
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("blog1")
                .setTypes("article")
                .setQuery(QueryBuilders.termQuery("title", "搜索"));

        //設置分頁
        //setFrom():從第幾條開始檢索,默認是0。
        // setSize():每頁最多顯示的記錄數。
        searchRequestBuilder.setFrom(0).setSize(5);

        //設置高亮數據
        HighlightBuilder hiBuilder=new HighlightBuilder();
        hiBuilder.preTags("<font style='color:red'>");
        hiBuilder.postTags("</font>");
        hiBuilder.field("title");
        searchRequestBuilder.highlighter(hiBuilder);

        SearchResponse searchResponse=searchRequestBuilder.get();
        //遍歷搜索結果數據
        traverseResult(searchResponse);
        //釋放資源
        client.close();
    }

    /**
     * 遍歷查詢結果
     *
     * @param searchResponse
     */
    private static void traverseResult(SearchResponse searchResponse) {
        SearchHits hits = searchResponse.getHits();
        // 獲取命中次數,查詢結果有多少對象
        System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
        Iterator<SearchHit> iterator = hits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            // 每個查詢對象
            System.out.println(searchHit.getSourceAsString());
            Text[] text=searchHit.getHighlightFields().get("title").getFragments();
            for (Text str : text) {
                System.out.println(str);
            }
            System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐");
        }
    }

 

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