Elasticsearch 的聚合(Aggregations)操作詳解

目錄

1. 概述

2. 聚合類型分類詳解

2.1?桶聚合(Bucket Aggregations)

2.1.1? 基礎桶聚合

2.1.2 特殊桶聚合

2.1.3?高級桶聚合

2.2?指標聚合(Metric Aggregations)

2.2.1 單值指標聚合(Single-value Metrics)

2.2.2 多值指標聚合(Multi-value Metrics)

2.3 管道聚合(Pipeline Aggregation)

2.3.1 數學計算類

2.3.2?桶操作類

2.3.3? 流程控制類

3.?聚合的作用范圍

4. 聚合排序

5. ES聚合分析不精準原因分析

6. Elasticsearch 聚合性能優化


1. 概述

Elasticsearch 的聚合(Aggregations)功能用于對數據進行統計、分析和分組,類似 SQL 中的?GROUP BY?與聚合函數(如?SUMAVG)。其核心分為桶聚合指標聚合管道聚合三類

基本語法

聚合查詢的語法結構與其他查詢相似,通常包含以下部分:
  • 查詢條件:指定需要聚合的文檔,可以使用標準的 Elasticsearch 查詢語法,如 term、match、range 等等。
  • 聚合函數:指定要執行的聚合操作,如 sum、avg、min、max、terms、date_histogram 等等。每個聚合命令都會生成一個聚合結果。
  • 聚合嵌套:聚合命令可以嵌套,以便更細粒度地分析數據。
GET <index_name>/_search
{"aggs": {"<aggs_name>": { // 聚合名稱需要自己定義"<agg_type>": {"field": "<field_name>"}}}
}
  • aggs_name:聚合函數的名稱
  • agg_type:聚合種類,比如是桶聚合(terms)或者是指標聚合(avg、sum、min、max等)
  • field_name:字段名稱或者叫域名。

聚合類型分類

Elasticsearch 聚合操作主要分為三大類:

聚合類型核心功能典型應用場景
桶聚合將文檔分組到"桶"中分組統計、分類分析
指標聚合對桶內文檔進行數值計算平均值、求和等數值計算
管道聚合對其他聚合結果進行二次處理復雜統計分析

示例數據準備

DELETE /employees
#創建索引庫
PUT /employees
{"mappings": {"properties": {"age":{"type": "integer"},"gender":{"type": "keyword"},"job":{"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 50}}},"name":{"type": "keyword"},"salary":{"type": "integer"}}}
}PUT /employees/_bulk
{ "index" : {  "_id" : "1" } }
{ "name" : "Emma","age":32,"job":"Product Manager","gender":"female","salary":35000 }
{ "index" : {  "_id" : "2" } }
{ "name" : "Underwood","age":41,"job":"Dev Manager","gender":"male","salary": 50000}
{ "index" : {  "_id" : "3" } }
{ "name" : "Tran","age":25,"job":"Web Designer","gender":"male","salary":18000 }
{ "index" : {  "_id" : "4" } }
{ "name" : "Rivera","age":26,"job":"Web Designer","gender":"female","salary": 22000}
{ "index" : {  "_id" : "5" } }
{ "name" : "Rose","age":25,"job":"QA","gender":"female","salary":18000 }
{ "index" : {  "_id" : "6" } }
{ "name" : "Lucy","age":31,"job":"QA","gender":"female","salary": 25000}
{ "index" : {  "_id" : "7" } }
{ "name" : "Byrd","age":27,"job":"QA","gender":"male","salary":20000 }
{ "index" : {  "_id" : "8" } }
{ "name" : "Foster","age":27,"job":"Java Programmer","gender":"male","salary": 20000}
{ "index" : {  "_id" : "9" } }
{ "name" : "Gregory","age":32,"job":"Java Programmer","gender":"male","salary":22000 }
{ "index" : {  "_id" : "10" } }
{ "name" : "Bryant","age":20,"job":"Java Programmer","gender":"male","salary": 9000}
{ "index" : {  "_id" : "11" } }
{ "name" : "Jenny","age":36,"job":"Java Programmer","gender":"female","salary":38000 }
{ "index" : {  "_id" : "12" } }
{ "name" : "Mcdonald","age":31,"job":"Java Programmer","gender":"male","salary": 32000}
{ "index" : {  "_id" : "13" } }
{ "name" : "Jonthna","age":30,"job":"Java Programmer","gender":"female","salary":30000 }
{ "index" : {  "_id" : "14" } }
{ "name" : "Marshall","age":32,"job":"Javascript Programmer","gender":"male","salary": 25000}
{ "index" : {  "_id" : "15" } }
{ "name" : "King","age":33,"job":"Java Programmer","gender":"male","salary":28000 }
{ "index" : {  "_id" : "16" } }
{ "name" : "Mccarthy","age":21,"job":"Javascript Programmer","gender":"male","salary": 16000}
{ "index" : {  "_id" : "17" } }
{ "name" : "Goodwin","age":25,"job":"Javascript Programmer","gender":"male","salary": 16000}
{ "index" : {  "_id" : "18" } }
{ "name" : "Catherine","age":29,"job":"Javascript Programmer","gender":"female","salary": 20000}
{ "index" : {  "_id" : "19" } }
{ "name" : "Boone","age":30,"job":"DBA","gender":"male","salary": 30000}
{ "index" : {  "_id" : "20" } }
{ "name" : "Kathy","age":29,"job":"DBA","gender":"female","salary": 20000}

2. 聚合類型分類詳解

2.1?桶聚合(Bucket Aggregations)

按照一定的規則,將文檔分配到不同的桶中,從而達到分類的目的。將文檔按規則分組到“桶”中,類似 SQL 的?GROUP BY。

桶聚合類型分類

2.1.1? 基礎桶聚合
聚合類型功能描述示例場景
terms按字段值分組按品牌統計商品數量
range按數值范圍分組按價格區間統計商品
date_range按日期范圍分組按時間段統計銷售額
histogram按固定間隔分組每100元價格段統計商品數
date_histogram按時間間隔分組每月/每周統計銷售額
geo_distance按地理位置距離分組按距離商圈范圍統計門店

注意:

  • Terms,需要字段支持filedata
    • keyword 默認支持fielddata
    • text需要在Mapping 中開啟fielddata,會按照分詞后的結果進行分桶
2.1.2 特殊桶聚合
聚合類型功能描述示例場景
filters使用自定義過濾器分組同時統計多個過濾條件結果
nested處理嵌套對象分組統計訂單中的商品分類
reverse_nested從嵌套對象返回父文檔分組統計含特定商品的訂單
children在父子文檔關系中進行分組統計作者及其書籍
composite多維度組合分組(替代多級terms)品牌+顏色組合統計
sampler獲取代表性樣本分組大數據集抽樣分析
2.1.3?高級桶聚合
聚合類型功能描述示例場景
significant_terms識別統計顯著性高的詞項發現異常關鍵詞
geohash_grid按地理網格分組區域熱力圖分析
variable_width自動調整數值區間寬度分組智能價格分段
adjacency_matrix關系矩陣分組用戶行為關聯分析

示例

獲取job的分類信息

# 對keword 進行聚合
GET /employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword"}}}
}
聚合可配置屬性有:
  • field:指定聚合字段
  • size:指定聚合結果數量
  • order:指定聚合結果排序方式
默認情況下,Bucket聚合會統計Bucket內的文檔數量,記為_count,并且按照_count降序排序。我們可以指定order屬性,自定義聚合的排序方式:
GET /employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword","size": 10,"order": {"_count": "desc" }}}}
}

限定聚合范圍

#只對salary在10000元以上的文檔聚合
GET /employees/_search
{"query": {"range": {"salary": {"gte": 10000 }}}, "size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword","size": 10,"order": {"_count": "desc" }}}}
}

注意:對 Text 字段進行 terms 聚合查詢,會失敗拋出異常

解決辦法:對 Text 字段打開 fielddata,支持terms aggregation

# 對 Text 字段進行 terms 聚合查詢,會失敗拋出異常
POST /employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job"}}}
}#對 Text 字段打開 fielddata,支持terms aggregation
PUT /employees/_mapping
{"properties" : {"job":{"type":  "text","fielddata": true}}
}# 對 Text 字段進行分詞,分詞后的terms
POST /employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job"}}}
}

Range & Histogram聚合

  • 按照數字的范圍,進行分桶
  • 在Range Aggregation中,可以自定義Key
Range 示例:按照工資的 Range 分桶
Salary Range分桶,可以自己定義 key
POST employees/_search
{"size": 0,"aggs": {"salary_range": {"range": {"field":"salary","ranges":[{"to":10000},{"from":10000,"to":20000},{"key":">20000","from":20000}]}}}
}

Histogram示例:按照工資的間隔分桶

#工資0到10萬,以 5000一個區間進行分桶
POST employees/_search
{"size": 0,"aggs": {"salary_histrogram": {"histogram": {"field":"salary","interval":5000,"extended_bounds":{"min":0,"max":100000}}}}
}

top_hits應用場景: 當獲取分桶后,桶內最匹配的頂部文檔列表

# 指定size,不同工種中,年紀最大的3個員工的具體信息
POST /employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword"},"aggs":{"old_employee":{"top_hits":{"size":3,"sort":[{"age":{"order":"desc"}}]}}}}}
}

嵌套聚合示例

# 嵌套聚合1,按照工作類型分桶,并統計工資信息
POST employees/_search
{"size": 0,"aggs": {"Job_salary_stats": {"terms": {"field": "job.keyword"},"aggs": {"salary": {"stats": {"field": "salary"}}}}}
}# 多次嵌套。根據工作類型分桶,然后按照性別分桶,計算工資的統計信息
POST employees/_search
{"size": 0,"aggs": {"Job_gender_stats": {"terms": {"field": "job.keyword"},"aggs": {"gender_stats": {"terms": {"field": "gender"},"aggs": {"salary_stats": {"stats": {"field": "salary"}}}}}}}
}

2.2?指標聚合(Metric Aggregations)

指標聚合主要用于對文檔進行數值計算,分為兩大類:

2.2.1 單值指標聚合(Single-value Metrics)

聚合類型

功能描述

公式/說明

avg

計算平均值

sum(field)/doc_count

sum

計算總和

Σ(field_values)

min

獲取最小值

min(field_values)

max

獲取最大值

max(field_values)

value_count

統計非空值數量

count(field_values)

cardinality

計算唯一值數量(去重計數)

distinct_count(field)

2.2.2 多值指標聚合(Multi-value Metrics)

聚合類型

功能描述

包含指標

stats

基礎統計匯總

count, min, max, avg, sum

extended_stats

擴展統計(含標準差/方差)

stats + std_deviation, variance

percentiles

計算百分位值(如P95/P99)

[P50, P75, P90, P95]

percentile_ranks

計算值的百分位排名

值X的百分位位置

top_hits

返回每個分組的最相關文檔

子聚合中的特殊類型

geo_centroid

計算地理坐標中心點

lat/lon平均值

median_absolute_deviation

計算中位數絕對偏差穩健統計離散度

示例

查詢員工的最低最高和平均工資

#多個 Metric 聚合,找到最低最高和平均工資
POST /employees/_search
{"size": 0,  "aggs": {"max_salary": {"max": {"field": "salary"}},"min_salary": {"min": {"field": "salary"}},"avg_salary": {"avg": {"field": "salary"}}}
}

2.3 管道聚合(Pipeline Aggregation)

對聚合分析的結果,再次進行聚合分析。

2.3.1 數學計算類

聚合類型

功能

公式示例

cumulative_sum

累積和

S? = a? + a? + ... + a?

derivative

變化率

Δy/Δx = (y?-y?)/(x?-x?)

moving_function

移動計算

SMA = (P?+P?+...+P?)/n

2.3.2?桶操作類

聚合類型

功能

類似SQL

max/min/avg/sum_bucket

桶值極值/平均

SELECT MAX(subtotal)

stats/extended_stats_bucket

桶統計信息

SELECT STATS(subtotal)

percentiles_bucket

桶百分位值

SELECT PERCENTILE(subtotal, 95)

2.3.3? 流程控制類

聚合類型

功能

類似編程概念

bucket_selector

桶過濾

HAVING?子句

bucket_sort

桶排序

ORDER BY
bucket_script自定義腳本函數計算

min_bucket示例

在員工數最多的工種里,找出平均工資最低的工種

# 平均工資最低的工種
POST employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field": "job.keyword","size": 10},"aggs": {"avg_salary": {"avg": {"field": "salary"}}}},"min_salary_by_job":{   "min_bucket": {    "buckets_path": "jobs>avg_salary"  }}}
}
  • min_salary_by_job結果和jobs的聚合同級
  • min_bucket求之前結果的最小值
  • 通過bucket_path關鍵字指定路徑

Stats示例

# 平均工資的統計分析
POST employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field": "job.keyword","size": 10},"aggs": {"avg_salary": {"avg": {"field": "salary"}}}},"stats_salary_by_job":{"stats_bucket": {"buckets_path": "jobs>avg_salary"}}}
}

percentiles示例

# 平均工資的百分位數
POST employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field": "job.keyword","size": 10},"aggs": {"avg_salary": {"avg": {"field": "salary"}}}},"percentiles_salary_by_job":{"percentiles_bucket": {"buckets_path": "jobs>avg_salary"}}}
}

Cumulative_sum示例

#Cumulative_sum   累計求和
POST employees/_search
{"size": 0,"aggs": {"age": {"histogram": {"field": "age","min_doc_count": 0,"interval": 1},"aggs": {"avg_salary": {"avg": {"field": "salary"}},"cumulative_salary":{"cumulative_sum": {"buckets_path": "avg_salary"}}}}}
}

3.?聚合的作用范圍

ES聚合分析的默認作用范圍是query的查詢結果集,同時ES還支持以下方式改變聚合的作用范圍:
  • Filter
  • Post Filter
  • Global

示例

#Query
POST employees/_search
{"size": 0,"query": {"range": {"age": {"gte": 20}}},"aggs": {"jobs": {"terms": {"field":"job.keyword"}}}
}#Filter
POST employees/_search
{"size": 0,"aggs": {"older_person": {"filter":{"range":{"age":{"from":35}}},"aggs":{"jobs":{"terms": {"field":"job.keyword"}}}},"all_jobs": {"terms": {"field":"job.keyword"}}}
}#Post field. 一條語句,找出所有的job類型。還能找到聚合后符合條件的結果
POST employees/_search
{"aggs": {"jobs": {"terms": {"field": "job.keyword"}}},"post_filter": {"match": {"job.keyword": "Dev Manager"}}
}#global 
# 使用global聚合來計算所有匹配查詢的文檔(即所有年齡大于或等于40歲的員工)的平均薪資。
#global聚合的特點是它會考慮查詢范圍內的所有文檔,而不僅僅是某個特定分組或桶中的文檔。
POST employees/_search
{"size": 0,"query": {"range": {"age": {"gte": 40}}},"aggs": {"jobs": {"terms": {"field":"job.keyword" }},"all":{"global":{},"aggs":{"salary_avg":{"avg":{"field":"salary"}}}}}
}

4. 聚合排序

指定order,按照count和key進行排序:
  • 默認情況,按照count降序排序
  • 指定size,就能返回相應的桶
#排序 order
#count and key
POST employees/_search
{"size": 0,"query": {"range": {"age": {"gte": 20}}},"aggs": {"jobs": {"terms": {"field":"job.keyword","order":[{"_count":"asc"},{"_key":"desc"}]}}}
}#排序 order
#count and key
POST employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword","order":[  {"avg_salary":"desc"}]},"aggs": {"avg_salary": {"avg": {"field":"salary"}}}}}
}#排序 order
#count and key
POST employees/_search
{"size": 0,"aggs": {"jobs": {"terms": {"field":"job.keyword","order":[  {"stats_salary.min":"desc"}]},"aggs": {"stats_salary": {"stats": {"field":"salary"}}}}}
}

5. ES聚合分析不精準原因分析

ElasticSearch在對海量數據進行聚合分析的時候會損失搜索的精準度來滿足實時性的需求。

Terms聚合分析的執行流程:

不精準的原因: 數據分散到多個分片,聚合是每個分片的取 Top X,導致結果不精準。ES 可以不每個分片Top X,而是全量聚合,但勢必這會有很大的性能問題。

思考:如何提高聚合精確度?
方案1:設置主分片為1
注意7.x版本已經默認為1。
適用場景:數據量小的小集群規模業務場景。
方案2:調大 shard_size 值
設置 shard_size 為比較大的值,官方推薦:size*1.5+10。shard_size 值越大,結果越趨近于精準聚合結果值。此外,還可以通過show_term_doc_count_error參數顯示最差情況下的錯誤值,用于輔助確定 shard_size 大小。
  • size:是聚合結果的返回值,客戶期望返回聚合排名前三,size值就是 3。
  • shard_size: 每個分片上聚合的數據條數。shard_size 原則上要大于等于 size
適用場景:數據量大、分片數多的集群業務場景。
測試: 使用kibana的測試數據
DELETE my_flights
PUT my_flights
{"settings": {"number_of_shards": 20},"mappings" : {"properties" : {"AvgTicketPrice" : {"type" : "float"},"Cancelled" : {"type" : "boolean"},"Carrier" : {"type" : "keyword"},"Dest" : {"type" : "keyword"},"DestAirportID" : {"type" : "keyword"},"DestCityName" : {"type" : "keyword"},"DestCountry" : {"type" : "keyword"},"DestLocation" : {"type" : "geo_point"},"DestRegion" : {"type" : "keyword"},"DestWeather" : {"type" : "keyword"},"DistanceKilometers" : {"type" : "float"},"DistanceMiles" : {"type" : "float"},"FlightDelay" : {"type" : "boolean"},"FlightDelayMin" : {"type" : "integer"},"FlightDelayType" : {"type" : "keyword"},"FlightNum" : {"type" : "keyword"},"FlightTimeHour" : {"type" : "keyword"},"FlightTimeMin" : {"type" : "float"},"Origin" : {"type" : "keyword"},"OriginAirportID" : {"type" : "keyword"},"OriginCityName" : {"type" : "keyword"},"OriginCountry" : {"type" : "keyword"},"OriginLocation" : {"type" : "geo_point"},"OriginRegion" : {"type" : "keyword"},"OriginWeather" : {"type" : "keyword"},"dayOfWeek" : {"type" : "integer"},"timestamp" : {"type" : "date"}}}
}POST _reindex
{"source": {"index": "kibana_sample_data_flights"},"dest": {"index": "my_flights"}
}GET my_flights/_count
GET kibana_sample_data_flights/_search
{"size": 0,"aggs": {"weather": {"terms": {"field":"OriginWeather","size":5,"show_term_doc_count_error":true}}}
}GET my_flights/_search
{"size": 0,"aggs": {"weather": {"terms": {"field":"OriginWeather","size":5,"shard_size":10,"show_term_doc_count_error":true}}}
}
在Terms Aggregation的返回中有兩個特殊的數值:
  • doc_count_error_upper_bound : 被遺漏的term 分桶,包含的文檔,有可能的最大值
  • sum_other_doc_count: 除了返回結果 bucket的terms以外,其他 terms 的文檔總數(總數-返回的總數

方案3:將size設置為全量值,來解決精度問題

將size設置為2的32次方減去1也就是分片支持的最大值,來解決精度問題。

原因:1.x版本,size等于 0 代表全部,高版本取消 0 值,所以設置了最大值(大于業務的全量值)。

全量帶來的弊端就是:如果分片數據量極大,這樣做會耗費巨大的CPU 資源來排序,而且可能會阻塞網絡。

適用場景:對聚合精準度要求極高的業務場景,由于性能問題,不推薦使用。

方案4:使用Clickhouse/ Spark 進行精準聚合

適用場景:數據量非常大、聚合精度要求高、響應速度快的業務場景。

6. Elasticsearch 聚合性能優化

插入數據時對索引進行預排序

  • Index sorting (索引排序)可用于在插入時對索引進行預排序,而不是在查詢時再對索引進行排序,這將提高范圍查詢(range query)和排序操作的性能。
  • 在 Elasticsearch 中創建新索引時,可以配置如何對每個分片內的段進行排序。
  • 這是 Elasticsearch 6.X 之后版本才有的特性。

PUT /my_index
{"settings": {"index":{"sort.field": "create_time","sort.order": "desc"}},"mappings": {"properties": {"create_time":{"type": "date"}}}
}

注意:預排序將增加 Elasticsearch 寫入的成本。在某些用戶特定場景下,開啟索引預排序會導致大約 40%-50% 的寫性能下降。也就是說,如果用戶場景更關注寫性能的業務,開啟索引預排序不是一個很好的選擇。

使用節點查詢緩存

節點查詢緩存(Node query cache)可用于有效緩存過濾器(filter)操作的結果。如果多次執行同一 filter 操作,這將很有效,但是即便更改過濾器中的某一個值,也將意味著需要計算新的過濾器結果。

你可以執行一個帶有過濾查詢的搜索請求,Elasticsearch將自動嘗試使用節點查詢緩存來優化性能。例如,如果你想緩存一個基于特定字段值的過濾查詢,你可以發送如下的HTTP請求:

GET /your_index/_search
{"query": {"bool": {"filter": {"term": {"your_field": "your_value"}}}}
}

使用分片請求緩存

聚合語句中,設置:size:0,就會使用分片請求緩存緩存結果。size = 0 的含義是:只返回聚合結果,不返回查詢結果。

GET /es_db/_search
{"size": 0,"aggs": {"remark_agg": {"terms": {"field": "remark.keyword"}}}
}

拆分聚合,使聚合并行化

Elasticsearch 查詢條件中同時有多個條件聚合,默認情況下聚合不是并行運行的。當為每個聚合提供自己的查詢并執行 msearch 時,性能會有顯著提升。因此,在 CPU 資源不是瓶頸的前提下,如果想縮短響應時間,可以將多個聚合拆分為多個查詢,借助:msearch 實現并行聚合。

#常規的多條件聚合實現
GET /employees/_search
{"size": 0,"aggs": {"job_agg": {"terms": {"field": "job.keyword"}},"max_salary":{"max": {"field": "salary"}}}
}
# msearch 拆分多個語句的聚合實現
GET _msearch
{"index":"employees"}
{"size":0,"aggs":{"job_agg":{"terms":{"field": "job.keyword"}}}}
{"index":"employees"}
{"size":0,"aggs":{"max_salary":{"max":{"field": "salary"}}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90651.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電子電氣架構 --- 高階智能駕駛對E/E架構的新要求

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

0.深度學習環境配置步驟

0.深度學習環境配置步驟 這里介紹深度學習環境配置詳細步驟&#xff0c;包括安裝軟件&#xff0c;每一步都有安裝時的截圖&#xff08;后續持續更新&#xff0c;敬請關注&#xff09; 目錄如下&#xff1a; 1.安裝anaconda 2.安裝CUDA 3.安裝CU_DNN 4.安裝pytorch

在 Azure 中配置 SMS 與 OTP

1. Azure Active Directory B2C (AAD B2C) 中的 SMS/OTP 身份驗證 1.1. 現狀與原理&#xff1a;電話注冊與登錄 Azure Active Directory B2C (AAD B2C) 提供了將電話號碼作為用戶身份標識進行注冊和登錄的功能&#xff0c;旨在為用戶提供一種便捷的替代傳統電子郵件或用戶名登錄…

簡單實現支付密碼的頁面及輸入效果

干我們這行&#xff0c;風吹日曬不到&#xff0c;就怕甲方突發奇想。 今天客戶要做一個安全密碼前置校驗&#xff0c;還要做成支付寶那種效果。ps:android端 心理吐槽了一萬遍以后&#xff0c;還是得面對現實。 先用通義問一遍&#xff0c;給了兩個方案&#xff0c;要么自己寫&…

proxmox 解決docker容器MongoDB創建報錯MongoDB 5.0+ requires a CPU with AVX support

目錄 最簡單直接的方式 測試MongoDB docker compose的安裝shell腳本 驗證訪問 最簡單直接的方式 讓虛擬機直接使用宿主機的物理 CPU 功能標志。 打開 Proxmox Web UI。 選擇你的 VM → 硬件 (Hardware) → CPU → 點擊 編輯 (Edit)。 將 CPU 類型改為 host。 確認并重啟…

向前滾動累加SQL 實現思路

一、業務背景在經營分析場景里&#xff0c;我們經常需要回答&#xff1a;“截至今天&#xff0c;過去 N 天/月/周累計發生了多少&#xff1f;”“把維度切到省、市、房型、項目經理、代理商等&#xff0c;結果又是什么&#xff1f;”本文用兩個真實需求做演示&#xff1a;以天為…

Spring AI(14)——文本分塊優化

RAG時&#xff0c;檢索效果的優劣&#xff0c;和文本的分塊的情況有很大關系。SpringAI中通過TokenTextSplitter對文本分塊。本文對SpringAI提供的TokenTextSplitter源碼進行了分析&#xff0c;并給出一些自己的想法&#xff0c;歡迎大家互相探討。查看了TokenTextSplitter的源…

Python----大模型(RAG 的智能評估-LangSmith)

一、LangSmith LangSmith是LangChain的一個子產品&#xff0c;是一個大模型應用開發平臺。它提供了從原 型到生產的全流程工具和服務&#xff0c;幫助開發者構建、測試、評估和監控基于LangChain 或其他 LLM 框架的應用程序。 安裝 LangSmith pip install langsmith0.1.137 官網…

磁懸浮軸承轉子不平衡質量控制策略設計:原理、分析與智能實現

磁懸浮軸承(Active Magnetic Bearing, AMB)以其無接觸、無摩擦、高轉速、無需潤滑等革命性優勢,在高端旋轉機械領域(如高速電機、離心壓縮機、飛輪儲能、航空航天動力系統)展現出巨大潛力。然而,轉子固有的質量不平衡是AMB系統面臨的核心挑戰之一,它誘發強同步振動,威脅…

C++查詢mysql數據

文章目錄 文章目錄 1.前言 2. 代碼 &#xff08;1&#xff09;執行查詢SQL &#xff08;2&#xff09;獲取結果集 &#xff08;3&#xff09;遍歷結果集&#xff08;獲取字段數、行數&#xff09; &#xff08;4&#xff09;釋放資源 3.完整代碼 1.前言 我們成功連接數…

【論文閱讀】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》

GenAttack&#xff1a;利用無梯度優化的實用黑盒攻擊 Moustafa Alzantot UCLA Los Angeles, U.S.A malzantotucla.edu Yash Sharma Cooper Union New York, U.S.A sharma2cooper.edu Supriyo Chakraborty IBM Research New York, U.S.A supriyous.ibm.com Huan Zhang UCLA Los…

CT、IT、ICT 和 DICT區別

這四個術語&#xff1a;CT、IT、ICT 和 DICT&#xff0c;是信息通信行業中常見的核心概念&#xff0c;它們既有演進關系&#xff0c;又有各自的技術重點。&#x1f539; 一、CT&#xff08;Communication Technology&#xff09;通信技術**定義&#xff1a;**以語音通信為核心的…

Effective C++ 條款4:確定對象被使用前已先被初始化

Effective C 條款4&#xff1a;確定對象被使用前已先被初始化核心思想&#xff1a;永遠在使用對象前將其初始化。未初始化對象是未定義行為的常見來源&#xff0c;尤其對于內置類型。 1. 內置類型手動初始化 int x 0; // 手動初始化 const char* text &quo…

LangSmith的配置介紹

文章目錄注冊及登錄生成API KeyLangSmith的配置方式一&#xff1a;放運行環境里方式二&#xff1a;寫代碼里執行代碼查看LangSmith上是否看到本次運行的項目記錄LangSmith的其他注意注冊及登錄 首先使用郵箱注冊一個賬號及設置密碼&#xff0c;等收到收到郵件后&#xff0c;進…

Linux的生態與軟件安裝

堅持用 清晰易懂的圖解 代碼語言&#xff0c;讓每個知識點變得簡單&#xff01; &#x1f680;呆頭個人主頁詳情 &#x1f331; 呆頭個人Gitee代碼倉庫 &#x1f4cc; 呆頭詳細專欄系列 座右銘&#xff1a; “不患無位&#xff0c;患所以立。” Linux的生態與軟件安裝前言目錄…

3.4 安全-分布式-數據庫-挖掘

一、數據庫的安全數據庫里面的安全措施&#xff1a;用戶標識和鑒定&#xff1a;用戶的賬戶口令等存取控制&#xff1a;對用戶操作進行控權&#xff0c;有對應權限碼才能操作。密碼存儲和傳輸&#xff1a;加密存儲。視圖的保護&#xff1a;視圖需要授權審計&#xff1a;專門的文…

多線程 Reactor 模式

目錄 多線程 Reactor 模式的核心動機 多線程演進方向 多線程 Reactor 模型結構 多線程 EchoServer 實現核心部分 Handler 的多線程化 多線程 Reactor 的三個核心點 本篇文章內容的前置知識為 單線程 Reactor 模式&#xff0c;如果不了解&#xff0c;可點擊鏈接學習 單線程…

[NLP]多電源域設計的仿真驗證方法

多電源域設計的仿真驗證方法 1. 更復雜的 Testbench 例子(多電源域、復雜低功耗場景) 假設有兩個電源域 PD1 和 PD2,分別對應控制信號 pwr_sw_ctrl1、iso_ctrl1、ret_ctrl1 和 pwr_sw_ctrl2、iso_ctrl2、ret_ctrl2,且兩域之間有通信。 RTL 端口聲明(簡化版) module top…

Apache Ignite 中 WHERE 子句中的子查詢(Subqueries in WHERE Clause)的執行方式

這段內容是關于 Apache Ignite 中 WHERE 子句中的子查詢&#xff08;Subqueries in WHERE Clause&#xff09;的執行方式 的說明。理解這段內容對于編寫高效的 SQL 查詢、避免性能瓶頸非常重要。下面我將為你 逐句解釋并深入理解這段內容。&#x1f9fe; 原文翻譯 解釋 原文&a…

MySQL(153)如何使用全文索引?

MySQL的全文索引&#xff08;Full-Text Index&#xff09;是一種特殊的索引類型&#xff0c;專門用于加速文本數據的搜索。與普通的B樹索引不同&#xff0c;全文索引適用于大文本字段&#xff08;如TEXT、VARCHAR等&#xff09;的全文搜索。它通過構建一個倒排索引&#xff0c;…