一、Es去重查詢分頁
Es查詢結果可能會包含重複的數據,要實現去重查詢並進行分頁顯示,需要結合Es中的聚合函數和分頁參數。首先使用terms aggregation對需要去重的字段進行聚合,然後再使用from和size參數對結果進行分頁。
GET /index/_search
{
"size": 10,
"from": 0,
"query": {...},
"aggs":{
"distinct_field":{
"terms":{
"field": "field_to_be_distinct"
}
}
}
}
二、Es單個字段去重查詢
如果只需要對單個字段進行去重查詢,可以使用cardinality aggregation函數。該函數不僅可以進行去重操作,還可以返回去重後的結果數量。
GET /index/_search
{
"query": {...},
"aggs": {
"distinct_field_count": {
"cardinality": {
"field": "field_to_be_distinct"
}
}
}
}
三、Es查詢語法
Es查詢常用的查詢語法有兩種:Query DSL和Query String。Query DSL是Es原生的查詢語法,Query String則是基於Lucene Query語法的更加簡潔易用的查詢方式。
Query DSL的語法結構較為複雜,但可以實現更加靈活的查詢操作,例如使用bool查詢組合多個查詢條件。
Query String則是基於字符串的查詢語法,使用語法簡單,類似於SQL的寫法。例如:
GET /index/_search?q=field_name:value
四、Es SQL查詢
Es支持SQL語法進行查詢,通過在Kibana中輸入SQL語句或者將SQL語句通過REST API傳遞給Es集群來執行SQL查詢。
ES SQL的查詢方式與傳統關係型數據庫相似。可以使用SELECT、GROUP BY、ORDER BY等關鍵字,支持多表查詢、連接查詢等操作。
POST /_sql?format=txt
{
"query": "SELECT * FROM index WHERE field_name = 'value' GROUP BY field_id ORDER BY field_date DESC LIMIT 10"
}
五、Es查詢數據去重
Es中的聚合函數可以實現對數據進行去重操作,包括根據字段值去重、字符串長度去重等。不同的聚合函數可以實現不同的去重方式。
例如使用terms aggregation進行字段值去重:
GET /index/_search
{
"size": 0,
"aggs": {
"distinct_field_values": {
"terms": {
"field": "field_name"
}
}
}
}
六、Es查詢索引
在Es中,為了加快查詢速度,可以對需要查詢的字段創建索引。創建索引可以使用mapping或者template進行操作,常見的索引類型包括text、keyword、date、numeric等。
例如創建text類型的索引:
PUT /index
{
"mappings": {
"properties": {
"field_name": {
"type": "text"
}
}
}
}
七、Es查詢去重複
Es中需要去重的時候,可以使用在查詢中添加”collapse”屬性的方式,即可以同時實現排序和去重。
GET /index/_search
{
"query": {...},
"collapse": {
"field": "field_name"
},
"sort": [{
"field_date": "desc"
}]
}
八、Es關聯查詢
在Es中,可以使用Nested類型嵌套關係來實現關聯查詢。Nested類型允許在一個文檔中嵌套其他文檔,以實現多層級的查詢。
例如創建Nested類型字段:
PUT /index
{
"mappings": {
"properties": {
"field_name": {
"type": "nested",
"properties": {
"subfield": {
"type": "text"
}
}
}
}
}
}
九、Es為什麼查詢速度快
Es查詢速度之所以快,主要有以下幾個原因:
- 倒排索引:Es使用倒排索引存儲數據,可以快速查找滿足條件的文檔。
- 分片和複製:Es將索引分成多個分片進行存儲和查詢,每個分片可以獨立的進行查詢,大大提高查詢效率。同時,Es也支持對分片進行複製,保證高可用性和數據備份。
- 緩存機制:Es內置了緩存機制,可以緩存查詢結果和聚合結果,提高查詢效率。
- 分布式架構:Es採用分布式架構,可以將數據分散存儲在多個節點上,使得查詢可以在多個節點中並行處理,提高查詢效率。
十、Ems快遞查詢
Ems快遞查詢是一種基於Ems快遞單號的物流查詢服務。與Es的去重查詢沒有直接關係,但都是常用的數據查詢方式。
例如使用Ems快遞單號進行查詢:
POST https://api-new.oee.dasouche-inc.net/order-delivery/dif-interface/query/es-ems
{
"emsCodes": [
"ems_code1",
"ems_code2",
...
]
}
原創文章,作者:URNE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138642.html