国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

elasticsearch的數(shù)據(jù)聚合

這篇具有很好參考價(jià)值的文章主要介紹了elasticsearch的數(shù)據(jù)聚合。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

聚合可以讓我們極其方便的實(shí)現(xiàn)對(duì)數(shù)據(jù)的統(tǒng)計(jì)、分析、運(yùn)算。例如:

  • 什么品牌的手機(jī)最受歡迎?

  • 這些手機(jī)的平均價(jià)格、最高價(jià)格、最低價(jià)格?

  • 這些手機(jī)每月的銷售情況如何?

實(shí)現(xiàn)這些統(tǒng)計(jì)功能的比數(shù)據(jù)庫(kù)的sql要方便的多,而且查詢速度非??欤梢詫?shí)現(xiàn)近實(shí)時(shí)搜索效果

聚合種類

聚合常見的有三類:

  • 桶(Bucket)聚合:用來對(duì)文檔做分組

    • TermAggregation:按照文檔字段值分組,例如按照品牌值分組、按照國(guó)家分組

    • Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組

  • 度量(Metric)聚合:用以計(jì)算一些值,比如:最大值、最小值、平均值等

    • Avg:求平均值

    • Max:求最大值

    • Min:求最小值

    • Stats:同時(shí)求max、min、avg、sum等

  • 管道(pipeline)聚合:其它聚合的結(jié)果為基礎(chǔ)做聚合

注意:參加聚合的字段必須是keyword、日期、數(shù)值、布爾類型 ?

DSL實(shí)現(xiàn)聚合

語(yǔ)句

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
    "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}
  • 設(shè)置size為0,結(jié)果中不包含文檔,只包含聚合結(jié)果
  • aggs定義聚合
  • brandAgg給聚合起個(gè)名字
  • terms聚合的類型,按照品牌值聚合,所以選擇term
  • field參與聚合的字段
  • terms里面的sezi希望獲取的聚合結(jié)果數(shù)量

發(fā)起請(qǐng)求的結(jié)果?

elasticsearch的數(shù)據(jù)聚合,elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

聚合結(jié)果排序

默認(rèn)情況下,Bucket聚合會(huì)統(tǒng)計(jì)Bucket內(nèi)的文檔數(shù)量,記為count,并且按照count降序排序。

我們可以指定order屬性,自定義聚合的排序方式,按照_count降序排列

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "desc"  
          },
        "size": 20
      }
    }
  }
}

發(fā)起請(qǐng)求的結(jié)果,?按照_count降序排列。

elasticsearch的數(shù)據(jù)聚合,elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

限定聚合范圍

默認(rèn)情況下,Bucket聚合是對(duì)索引庫(kù)的所有文檔做聚合,但真實(shí)場(chǎng)景下,用戶會(huì)輸入搜索條件,因此聚合必須是對(duì)搜索結(jié)果聚合。那么聚合必須添加限定條件。我們可以限定要聚合的文檔范圍,只要添加query條件即可。

?只對(duì)200元以下的文檔聚合

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200  
      }
    }
  }, 
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}

聚合得到的品牌明顯變少了 ?

elasticsearch的數(shù)據(jù)聚合,elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

Metric聚合語(yǔ)法

現(xiàn)在我們需要對(duì)桶內(nèi)的酒店做運(yùn)算,獲取每個(gè)品牌的用戶評(píng)分的min、max、avg等值

?score_stats聚合是在brandAgg的聚合內(nèi)部嵌套的子聚合。因?yàn)槲覀冃枰诿總€(gè)桶分別計(jì)算

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20
      },
      "aggs": { 
        "score_stats": { 
        "stats": { 
          "field": "score" 
          }
        }
      }
    }
  }
}

我們還可以給聚合結(jié)果做個(gè)排序,例如按照每個(gè)桶的酒店平均分做排序,score_stats.avg對(duì)score聚合函數(shù)的平均值進(jìn)行降序排序。

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20,
        "order": {
          "score_stats.avg": "desc"
        }
      },
      "aggs": { 
        "score_stats": { 
        "stats": { 
          "field": "score" 
          }
        }
      }
    }
  }
}

小結(jié)

aggs代表聚合,與query同級(jí) ?

聚合必須的三要素:

  • 聚合名稱

  • 聚合類型

  • 聚合字段

聚合可配置屬性有:

  • size:指定聚合結(jié)果數(shù)量

  • order:指定聚合結(jié)果排序方式

  • field:指定聚合字段

java代碼實(shí)現(xiàn)聚合

搜索頁(yè)面的品牌、城市等信息不應(yīng)該是在頁(yè)面寫死,而是通過聚合索引庫(kù)中的酒店數(shù)據(jù)得來的 ?

controller類



import cn.itcast.hotel.pojo.PageResult;
import cn.itcast.hotel.pojo.RequestParams;
import cn.itcast.hotel.service.IHotelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/hotel")
public class HotelController {

    @Autowired
    private IHotelService hotelService;


    @PostMapping("filters")
    public Map<String, List<String>> getFilters(@RequestBody RequestParams params){
        return hotelService.getFilters(params);
    }
}

service類



import cn.itcast.hotel.mapper.HotelMapper;
import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.pojo.PageResult;
import cn.itcast.hotel.pojo.RequestParams;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {

    @Autowired
    private RestHighLevelClient client;

    

    @Override
    public Map<String, List<String>> getFilters(RequestParams params) {
        try {
            // 1.準(zhǔn)備Request
            SearchRequest request = new SearchRequest("hotel");
            // 2.準(zhǔn)備DSL
            // 2.1.query
            // buildBasicQuery(params, request);
            // 2.2.設(shè)置size
            request.source().size(0);
            // 2.3.聚合
            buildAggregation(request);
            // 3.發(fā)出請(qǐng)求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            // 4.解析結(jié)果
            Map<String, List<String>> result = new HashMap<>();
            Aggregations aggregations = response.getAggregations();
            // 4.1.根據(jù)品牌名稱,獲取品牌結(jié)果
            List<String> brandList = getAggByName(aggregations, "brandAgg");
            result.put("品牌", brandList);
            // 4.2.根據(jù)品牌名稱,獲取品牌結(jié)果
            List<String> cityList = getAggByName(aggregations, "cityAgg");
            result.put("城市", cityList);
            // 4.3.根據(jù)品牌名稱,獲取品牌結(jié)果
            List<String> starList = getAggByName(aggregations, "starAgg");
            result.put("星級(jí)", starList);

            return result;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    private void buildAggregation(SearchRequest request) {
        request.source().aggregation(AggregationBuilders
                .terms("brandAgg")
                .field("brand")
                .size(100)
        );
        request.source().aggregation(AggregationBuilders
                .terms("cityAgg")
                .field("city")
                .size(100)
        );
        request.source().aggregation(AggregationBuilders
                .terms("starAgg")
                .field("starName")
                .size(100)
        );
    }

    private List<String> getAggByName(Aggregations aggregations, String aggName) {
        // 4.1.根據(jù)聚合名稱獲取聚合結(jié)果
        Terms brandTerms = aggregations.get(aggName);
        // 4.2.獲取buckets
        List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();
        // 4.3.遍歷
        List<String> brandList = new ArrayList<>();
        for (Terms.Bucket bucket : buckets) {
            // 4.4.獲取key
            String key = bucket.getKeyAsString();
            brandList.add(key);
        }
        return brandList;
    }
   
   
}

發(fā)送請(qǐng)求,獲得結(jié)果

elasticsearch的數(shù)據(jù)聚合,elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-701327.html

到了這里,關(guān)于elasticsearch的數(shù)據(jù)聚合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch搜索引擎:數(shù)據(jù)的寫入流程

    ElasticSearch搜索引擎:數(shù)據(jù)的寫入流程

    (1)ES 客戶端選擇一個(gè)節(jié)點(diǎn) node 發(fā)送請(qǐng)求過去,這個(gè)節(jié)點(diǎn)就是協(xié)調(diào)節(jié)點(diǎn) coordinating node? (2)協(xié)調(diào)節(jié)點(diǎn)對(duì) document 進(jìn)行路由,通過 hash 算法計(jì)算出數(shù)據(jù)應(yīng)該落在哪個(gè)分片?shard 上,然后根據(jù)節(jié)點(diǎn)上維護(hù)的 shard 信息,將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的實(shí)際處理節(jié)點(diǎn)node上 shard = hash(document_id) %

    2023年04月14日
    瀏覽(27)
  • 搜索引擎(大數(shù)據(jù)檢索)論述[elasticsearch原理相關(guān)]

    搜索引擎(大數(shù)據(jù)檢索)論述[elasticsearch原理相關(guān)]

    首先需要大致知道搜索引擎有大致幾類:1.全文搜索引擎 2.垂直搜索引擎 3.類目搜索引擎等。 1.全文搜索引擎:是全文本覆蓋的,百度,google等都是全文本搜索,就是我搜一個(gè)詞項(xiàng)“方圓”,那么這個(gè)詞項(xiàng)可以是數(shù)字平方的概念,可以是一個(gè)人名,可以是一首歌等,所有的相

    2023年04月08日
    瀏覽(31)
  • 基于Elasticsearch與Hbase組合框架的大數(shù)據(jù)搜索引擎

    基于Elasticsearch與Hbase組合框架的大數(shù)據(jù)搜索引擎

    本項(xiàng)目為學(xué)校大數(shù)據(jù)工程實(shí)訓(xùn)項(xiàng)目,共開發(fā)4周,答辯成績(jī)不錯(cuò)。代碼倉(cāng)庫(kù)放文章尾,寫的不好,代碼僅供參考。 對(duì)于結(jié)構(gòu)化數(shù)據(jù) ,因?yàn)樗鼈兙哂刑囟ǖ慕Y(jié)構(gòu),所以我們一般都是可以通過關(guān)系型數(shù)據(jù)庫(kù)(MySQL,Oracle 等)的二維表(Table)的方式存儲(chǔ)和搜索,也可以建立索引。

    2024年02月09日
    瀏覽(23)
  • Elasticsearch (ES) 搜索引擎: 數(shù)據(jù)類型、動(dòng)態(tài)映射、多類型(子字段)

    原文鏈接:https://xiets.blog.csdn.net/article/details/132348634 版權(quán)聲明:原創(chuàng)文章禁止轉(zhuǎn)載 專欄目錄:Elasticsearch 專欄(總目錄) ES 映射字段的 數(shù)據(jù)類型 ,官網(wǎng)文檔參考:Field data types。 下面是 ES 常用的一些基本數(shù)據(jù)類型。 字符串 類型: keyword :類型。 text :文本類型。

    2024年03月23日
    瀏覽(38)
  • 《Spring Boot 實(shí)戰(zhàn)派》--13.集成NoSQL數(shù)據(jù)庫(kù),實(shí)現(xiàn)Elasticsearch和Solr搜索引擎

    《Spring Boot 實(shí)戰(zhàn)派》--13.集成NoSQL數(shù)據(jù)庫(kù),實(shí)現(xiàn)Elasticsearch和Solr搜索引擎

    ?????????關(guān)于搜索引擎 我們很難實(shí)現(xiàn) Elasticseach 和 Solr兩大搜索框架的效果;所以本章針對(duì)兩大搜索框架,非常詳細(xì)地講解 它們的原理和具體使用方法, 首先 介紹什么是搜索引擎 、如何用 MySQL實(shí)現(xiàn)簡(jiǎn)單的搜索引擎,以及Elasticseach 的 概念和接口類; 然后介紹Elasticseach

    2023年04月09日
    瀏覽(25)
  • ES搜索引擎入門+最佳實(shí)踐(九):項(xiàng)目實(shí)戰(zhàn)(二)--elasticsearch java api 進(jìn)行數(shù)據(jù)增刪改查

    ? ? ? ? 本篇是這個(gè)系列的最后一篇了,在這之前可以先看看前面的內(nèi)容: ES搜索引擎入門+最佳實(shí)踐(一)_flame.liu的博客-CSDN博客 ES搜索引擎入門+最佳實(shí)踐(二)_flame.liu的博客-CSDN博客 ES搜索引擎入門+最佳實(shí)踐(三)_flame.liu的博客-CSDN博客 ES搜索引擎入門+最佳實(shí)踐(四)_flame.liu的博客

    2024年02月12日
    瀏覽(28)
  • Java SpringBoot API 實(shí)現(xiàn)ES(Elasticsearch)搜索引擎的一系列操作(超詳細(xì))(模擬數(shù)據(jù)庫(kù)操作)

    Java SpringBoot API 實(shí)現(xiàn)ES(Elasticsearch)搜索引擎的一系列操作(超詳細(xì))(模擬數(shù)據(jù)庫(kù)操作)

    小編使用的是elasticsearch-7.3.2 基礎(chǔ)說明: 啟動(dòng):進(jìn)入elasticsearch-7.3.2/bin目錄,雙擊elasticsearch.bat進(jìn)行啟動(dòng),當(dāng)出現(xiàn)一下界面說明,啟動(dòng)成功。也可以訪問http://localhost:9200/ 啟動(dòng)ES管理:進(jìn)入elasticsearch-head-master文件夾,然后進(jìn)入cmd命令界面,輸入npm?run?start?即可啟動(dòng)。訪問http

    2024年02月04日
    瀏覽(34)
  • 分布式搜索引擎ElasticSearch——搜索功能

    分布式搜索引擎ElasticSearch——搜索功能

    DSL查詢分類 DSL官方文檔 全文檢索查詢 精確查詢 地理查詢 復(fù)合查詢 Function Score Query function score query Boolean Query 排序 分頁(yè) 官方文檔 高亮 快速入門 match,term,range,bool查詢 排序和分頁(yè) 高亮顯示 就是在前面抽取的解析代碼中進(jìn)一步添加關(guān)于高亮的解析部分,因?yàn)閔ighlight和so

    2024年02月01日
    瀏覽(28)
  • 分布式搜索引擎——elasticsearch搜索功能

    分布式搜索引擎——elasticsearch搜索功能

    Elasticsearch提供了基于JSON的DSL (Domain Specific Language)來定義查詢。常見的查詢類型包括: 查詢所有:查詢出所有數(shù)據(jù),一般測(cè)試用。例如:match_all 全文檢索(full text)查詢:利用分詞器對(duì)用戶輸入內(nèi)容分詞,然后去倒排索引庫(kù)中匹配。例如: match_query multi_match_query 精確查詢:根據(jù)精確詞條

    2024年02月05日
    瀏覽(36)
  • Elasticsearch 搜索引擎

    Elasticsearch 搜索引擎

    一、創(chuàng)建索引庫(kù) *put* *http://localhost:9200/* *索引庫(kù)名稱* PUT http://localhost:9200/xc_course number_of_shards:設(shè)置分片的數(shù)量,在集群中通常設(shè)置多個(gè)分片,表示一個(gè)索引庫(kù)將拆分成多片分別存儲(chǔ)不同 的結(jié)點(diǎn),提高了ES的處理能力和高可用性,入門程序使用單機(jī)環(huán)境,這里設(shè)置為1。 numb

    2024年02月01日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包