最新Java Elasticsearch 7.10教程(六)-詞頻統計


一、高亮查詢方案

  • 1、直接基於http發送請求
  • 2、基於springboot Repositories
  • 3、基於原生Rest Client(HighRestClient)

 

二、具體實現

1、直接基於http發送請求

 

#詞頻統計
DELETE message_index
#創建索引數據結構
PUT message_index
{
   "mappings": {
       "properties":{
            "message": {
               "analyzer": "ik_smart",
                "type": "text",
                "fielddata":"true"
            }
        }
    }
}

#增加doc1
PUT /message_index/_doc/1
{
   "message":"沉溺於「輕易獲得高成就感」的事情:有意無意地尋求用很小付出獲得很大「回報」的偏方,哪怕回報是虛擬的"
 }
#增加doc2
PUT /message_index/_doc/2
{
    "message":"過度追求“短期回報”可以先思考這樣一個問題:為什么玩王者榮耀沉溺我們總是停不下來回報"

 }
 
#增加doc3
PUT /message_index/_doc/3
{
   "message":"過度追求的努力無法帶來超額的回報,就因此放棄了努力。這點在聰明人身上尤其明顯。以前念本科的時候身在沉溺"
 }
 
#aggs為Aggregations(聚合)縮寫
#size 10 為前10的統計結果
#默認熱點降序出結果
POST /message_index/_search
{
   "size" : 0,  
    "aggs" : {   
        "messages" : {   
            "terms" : {   
               "size" : 10,
              "field" : "message"
            }  
        }
    }
}

 

當方法使用的是fielddata的方式,另外就是也有使用keyword的方式。keyword與fielddata類似。他們都有一些弊端,如fielddata會占用堆空間,keyword不支持分詞(適合放一些類似郵件賬號這種數據)。在官網還有另一種詞頻統計的方法,就是termvectors詞條向量的方式,具體見以下鏈接。

 

Term vectors API | Elasticsearch Reference [7.9] | Elastic​www.elastic.co圖標

2、基於springboot Repositories

暫時沒有找到Repositories詞頻統計的代碼,如果有這塊代碼的大神歡迎留言

 

3、基於原生Rest Client(HighRestClient)

      /**
     * 詞頻統計aggregate
     */
    @Test
    public void aggregate() throws IOException {
        SearchRequest searchRequest = new SearchRequest("person-index");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        TermsAggregationBuilder aggregation = AggregationBuilders.terms("person-aggregate")
                .field("firstname");
        searchSourceBuilder.aggregation(aggregation);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        Aggregations aggregations = searchResponse.getAggregations();
        Terms byCompanyAggregation = aggregations.get("person-aggregate");
        List<? extends Terms.Bucket> elasticBucket = byCompanyAggregation.getBuckets();
        elasticBucket.forEach(el -> {
            log.info("key:" + el.getKeyAsString());
            log.info("doc_count:" + el.getDocCount());

        });

    }

 

源代碼倉庫:

https://gitee.com/hankzhousandyos/springboot-elasticsearch​gitee.com

 

最新Java Elasticsearch 7.10教程(匯總)

 

玄明Hanko:最新Java Elasticsearch 7.10教程(匯總)​zhuanlan.zhihu.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM