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

golang實現(xiàn)es根據(jù)某字段分組,統(tǒng)計每組某一字段的數(shù)量,過濾空值并去重

這篇具有很好參考價值的文章主要介紹了golang實現(xiàn)es根據(jù)某字段分組,統(tǒng)計每組某一字段的數(shù)量,過濾空值并去重。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求:

索引:dna

需求:根據(jù)app.Id分組,統(tǒng)計每組的OwnerBid數(shù)量,過濾空值并去重

dna索引結(jié)構(gòu)

type Dna struct {
    App struct {
        AcCode     string `json:"ac_code"`
        BifUserBid string `json:"bif_user_bid"`
        Id         string `json:"id"`
        Name       string `json:"name"`
        Type       int    `json:"type"`
        ChainName  string `json:"chainName"`
    } `json:"app"`
    BifUser struct {
        Dna721ContractAddress string `json:"dna721_contract_address"`
    } `json:"bif_user"`
    Category   string    `json:"category"`
    CreateTime time.Time `json:"create_time"`
    DisplayUrl string    `json:"display_url"`
    DnaPrice   string    `json:"dna_price"`
    Id         string    `json:"id"`
    Name       string    `json:"name"`
    Number     string    `json:"number"`
    OwnerBid   string    `json:"owner_bid"`
    Series     struct {
        Issuer string `json:"issuer"`
        Name   string `json:"name"`
    } `json:"series"`
    SeriesId string `json:"series_id"`
    Status   int    `json:"status"`
    TokenBid string `json:"token_bid"`
    Url      string `json:"url"`
}

es查詢語句

{
  "aggregations": {
    "ownerCount": {
      "aggregations": {
        "countAgg": {
          "cardinality": {
            "field": "owner_bid"
          }
        }
      },
      "terms": {
        "field": "app.id",
        "size": 5
      }
    }
  },
  "query": {
    "bool": {
      "must_not": {
        "term": {
          "owner_bid": ""
        }
      },
      "should": {
        "terms": {
          "app.id": [
            "e05aca13-34f6-4f3e-88d3-76698cad76c9",
            "691f84ed-8ecc-40ab-8880-4674d93c85e4",
            "c0ffecef-dad8-481c-ae05-1a55e8724327",
            "e0ffbbba-b49e-4570-a4b1-1cb74e4ad2ba",
            "f48717b2-a0a3-41c2-a978-f54299a1e42d"
          ]
        }
      }
    }
  },
  "size": 0
}

es查詢結(jié)果

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 2,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2941,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [ ]
  },
  "aggregations": {
    "ownerCount": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "c0ffecef-dad8-481c-ae05-1a55e8724327",
          "doc_count": 2522,
          "countAgg": {
            "value": 2
          }
        }
        ,
        {
          "key": "e0ffbbba-b49e-4570-a4b1-1cb74e4ad2ba",
          "doc_count": 374,
          "countAgg": {
            "value": 1
          }
        }
        ,
        {
          "key": "f48717b2-a0a3-41c2-a978-f54299a1e42d",
          "doc_count": 45,
          "countAgg": {
            "value": 1
          }
        }
      ]
    }
  }
}

goalng實現(xiàn)

models.EsCountAgg

type EsCountAgg struct {
	DocCountErrorUpperBound int64 `json:"doc_count_error_upper_bound"`
	SumOtherDocCount        int64 `json:"sum_other_doc_count"`
	Buckets                 []struct {
		Key      string `json:"key"`
		DocCount int64  `json:"doc_count"`
		CountAgg struct {
			Value float64 `json:"value"`
		} `json:"countAgg"`
	} `json:"buckets"`
}
var appIds []interface{}
for _, app := range appResList {
	appIds = append(appIds, app.AppId)
}
appTermsQuery := elastic.NewTermsQuery("app.id", appIds...)
searchDna := l.svcCtx.OEsClient.OClient.Search().Index("dna")

// 持有者數(shù)量, owner_bid去重,過濾空值,按app.id分組
	searchDna = l.svcCtx.OEsClient.OClient.Search().Index("dna")
	ownerRes, err := searchDna.Query(elastic.NewBoolQuery().Should(appTermsQuery).MustNot(elastic.NewTermQuery("owner_bid", ""))).
		Aggregation("ownerCount", elastic.NewTermsAggregation().Field("app.id").Size(len(appIds)).
		SubAggregation("countAgg", elastic.NewCardinalityAggregation().Field("owner_bid"))).Size(0).Do(l.ctx)
	if err != nil {
		return nil, err
	}
	var ownerCounts models.EsCountAgg
	err = json.Unmarshal(ownerRes.Aggregations["ownerCount"], &ownerCounts)
	if err != nil {
		return nil, err
	}
	ownerCountM := make(map[string]int64, len(ownerCounts.Buckets))
	for _, ownerCount := range ownerCounts.Buckets {
		ownerCountM[ownerCount.Key] = int64(ownerCount.CountAgg.Value)
	}
	for i, app := range appResList {
		appResList[i].OwnerBidCounts = ownerCountM[app.AppId]
	}

更多文章

【面向校招】全力備戰(zhàn)2023Golang實習(xí)與校招

歡迎進群交流:1007576722文章來源地址http://www.zghlxwxcb.cn/news/detail-580757.html

到了這里,關(guān)于golang實現(xiàn)es根據(jù)某字段分組,統(tǒng)計每組某一字段的數(shù)量,過濾空值并去重的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【SQL】對表中的記錄通過時間維度分組,統(tǒng)計出每組的記錄條數(shù)

    【SQL】對表中的記錄通過時間維度分組,統(tǒng)計出每組的記錄條數(shù)

    場景:一般用作數(shù)據(jù)統(tǒng)計,比如統(tǒng)計一個淘寶用戶在年、月、日的維度上的訂單數(shù)。 業(yè)務(wù):一個集合,以時間維度來進行分組求和。 準備一張訂單表order,有一些常規(guī)屬性,比如創(chuàng)建時間,訂單號。 DDL語句如下: 測試數(shù)據(jù)準備如下,50條DML語句,其中order_date分布在2023年1月

    2024年01月16日
    瀏覽(30)
  • MySQL使用GROUP BY分組后,獲取每組中時間記錄最新的行對應(yīng)的其他字段

    MySQL使用GROUP BY分組后,獲取每組中時間記錄最新的行對應(yīng)的其他字段

    在編寫MySQL數(shù)據(jù)庫查詢語句時,經(jīng)常遇到使用GROUP BY分組后,需要獲取每組中時間記錄最新的行對應(yīng)的其他字段這一情況。例如下表(t_score): id student course score examdate 1 小張 語文 89.0 2023-06-29 2 小張 數(shù)學(xué) 90.0 2023-06-29 3 小張 語文 91.0 2024-01-10 4 小張 數(shù)學(xué) 93.0 2024-01-10 5 小李 語

    2024年01月17日
    瀏覽(22)
  • MySQL如何查詢根據(jù)某一條件分組,再查詢出每組數(shù)據(jù)中時間最早或最晚的數(shù)據(jù)

    最近遇到個需求,需要先根據(jù)A條件進行分組,然后查詢出每組數(shù)據(jù)中時間最近的一條數(shù)據(jù),立馬就寫出了sql語句 但是執(zhí)行了一下,發(fā)現(xiàn)不對,子查詢中 order by 貌似失效了,查出來的數(shù)據(jù)并不是要想要的時間最近的數(shù)據(jù)。 經(jīng)過我的研究,發(fā)現(xiàn),想要子查詢中使用order by生效,

    2024年03月09日
    瀏覽(26)
  • HIVE SQL 根據(jù)主鍵去重并實現(xiàn)其余字段分組聚合

    HIVE SQL 根據(jù)主鍵去重并實現(xiàn)其余字段分組聚合

    相同個人id下所有字段按時間順序補位,取首個不為空值 * 注意:此處是取的首個不為空(即不為null)的字段,所以在實際使用過程中應(yīng)提前將空字符串轉(zhuǎn)為null值。

    2024年02月16日
    瀏覽(23)
  • Mysql分組排序取每組第一條(二種實現(xiàn)方式)

    Mysql分組排序取每組第一條(二種實現(xiàn)方式)

    記錄一下最近的一個需求,查不同產(chǎn)品排名第一的圖片作為主圖 其實一開始想用的是 mybatis的級聯(lián)查詢 ,結(jié)果說需要一次性全部查出來 那就沒事了,改 sql 咯: 親測實用 MySQL:8.0 Java:1.8 建表語句: 這一種也是網(wǎng)上推薦最多的,但個人覺得局限性太大,不介意用在實戰(zhàn)上

    2024年02月06日
    瀏覽(24)
  • 【Sql】根據(jù)字段分組排序,取其第一條數(shù)據(jù)

    【Sql】根據(jù)字段分組排序,取其第一條數(shù)據(jù)

    (1)問題描述 有時候我們需要對數(shù)據(jù)進行去重處理,例如查詢結(jié)果里的文件名有重復(fù),我們希望可以按照創(chuàng)建時間排序,最終結(jié)果里每個文件名只取創(chuàng)建時間最近的一個。 (2)有哪些問題 想到去重,可以想到使用distinct或者group by分組。但是這兩者有個問題,例如我們查詢

    2024年02月16日
    瀏覽(21)
  • 用mysql實現(xiàn)按條件分組并且每組去時間最大的一條

    可以考慮使用子查詢或者連接查詢實現(xiàn)。以下是兩種語法: 其中,組內(nèi)條件是按照哪個字段進行分組的條件,可以是一個或多個字段。時間是需求中要篩選的時間字段,假設(shè)為time字段。這個查詢會返回滿足組內(nèi)條件下時間最大的記錄。 其中,組內(nèi)條件和時間的含義同上。這

    2024年02月16日
    瀏覽(44)
  • MySQL根據(jù)出生日期查詢年齡,以及對年齡進行分組統(tǒng)計

    MySQL根據(jù)出生日期查詢年齡,以及對年齡進行分組統(tǒng)計

    表stu數(shù)據(jù)如下 1. 根據(jù)出生日期查詢年齡 返回結(jié)果: 函數(shù)DATE():提取日期或日期/時間表達式的日期部分; 函數(shù)CURDATE():返回當前的日期; 函數(shù)TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):計算兩個日期的時間差,unit是計算時間差的單位,可以是SECOND秒、MINUTE分鐘、HOUR小時、DAY天

    2024年02月11日
    瀏覽(23)
  • ES統(tǒng)計分組后的分組數(shù)量

    工作中遇到需要統(tǒng)計分組數(shù)量的查詢,記錄一下 ps: 按區(qū)域分組, 統(tǒng)計有幾個區(qū)域 結(jié)果

    2024年02月07日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包