Java+springboot+elasticsearch7.6.2實現分組查詢(平級+層級)並實現script多字段拼接查詢
簡介:關於elasticsearch的“層級”聚合,百度一下有一大堆文章。這裏不再囉嗦了,由於百度了三個小時,也沒找到我想要的"平級"查詢的方法,最後還是自己研究源碼整除來的,其實就是那麼那麼簡單,只是沒有例子,就不好整。上乾貨。
注:對es裏的專業用語不熟,所以這裏用的"平級","層級"兩個測只是形象詞語,不是es專業叫法。。。知道叫法的請留言告知。
目錄
Java+springboot+elasticsearch7.6.2實現分組查詢(平級+層級)並實現script多字段拼接查詢
第一步、 實現平級搜索。
先看一下,測試數據的數據結構:
kibana:
GET ermsftrv1/_search
{
"query": {
"match_all": {}
}
}
結果:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6502586031240448",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新建文本文檔",
"archNo" : "0022-SB0000.TODO-TODO-001",
"archTypeCode" : "SB0000",
"archTypeId" : "6485930821313792",
"archTypeName" : "設備儀器",
"archivedDate" : 1587545484000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502586302145792,
"id" : "6502586031240448",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650556800000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000722",
"writingDate" : 1650556800000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6500384144856320",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "問題",
"archNo" : "0022-JS0000-TODO.-TODO-027",
"archTypeCode" : "JS0000",
"archTypeId" : "6485924961527040",
"archTypeName" : "建設項目",
"archivedDate" : 1587548214000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502597485647104,
"id" : "6500384144856320",
"pageNum" : "1",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650038400000,
"secretId" : "2",
"secretPeriodId" : 9,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000723",
"writingDate" : 1650038400000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503214760639744",
"_score" : 1.0,
"_source" : {
"annual" : "2020",
"archName" : "曹操出行-2行程單",
"archNo" : "0022-ZZ0100.TODO-03-006",
"archTypeCode" : "ZZ0100",
"archTypeId" : "6489894262050048",
"archTypeName" : "01 企業證照",
"archivedDate" : 1587699428000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503216857251072,
"id" : "6503214760639744",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "30年",
"savePeriodId" : "3",
"secret" : "核心商密",
"secretExpDate" : 1638633600000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000187",
"writingDate" : 1638633600000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503218290695424",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "消息接入規範",
"archNo" : "0022-ZZ0200.TODO-K093-002",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587709784000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 2,
"expDate" : 1619258366000,
"fileNo" : "",
"handlerId" : 6503218290752768,
"id" : "6503218290695424",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1808560781000,
"secretId" : "3",
"secretPeriodId" : 7,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000318",
"writingDate" : 1584547200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140862208",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200408",
"archNo" : "0022-ZZ0200.TODO-null-010",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265140927744,
"id" : "6503265140862208",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1649347200000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000768",
"writingDate" : 1649347200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140526336",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200415",
"archNo" : "0022-ZZ0200.TODO-null-011",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265411443968,
"id" : "6503265140526336",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650384000000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000769",
"writingDate" : 1650384000000,
"year" : "2020"
}
}
]
}
}
實現archTypeId和year做聚合實現平級分組。
kibana:
POST ermsftrv1/_search
{
"aggs": {
"archTypeGroup": {
"terms": {
"field": "archTypeId.keyword",
"size": 10
}
},
"yearGroup": {
"terms": {
"field": "year.keyword",
"size": 10
}
}
}
}
結果:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6502586031240448",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新建文本文檔",
"archNo" : "0022-SB0000.TODO-TODO-001",
"archTypeCode" : "SB0000",
"archTypeId" : "6485930821313792",
"archTypeName" : "設備儀器",
"archivedDate" : 1587545484000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502586302145792,
"id" : "6502586031240448",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650556800000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000722",
"writingDate" : 1650556800000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6500384144856320",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "問題",
"archNo" : "0022-JS0000-TODO.-TODO-027",
"archTypeCode" : "JS0000",
"archTypeId" : "6485924961527040",
"archTypeName" : "建設項目",
"archivedDate" : 1587548214000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502597485647104,
"id" : "6500384144856320",
"pageNum" : "1",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650038400000,
"secretId" : "2",
"secretPeriodId" : 9,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000723",
"writingDate" : 1650038400000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503214760639744",
"_score" : 1.0,
"_source" : {
"annual" : "2020",
"archName" : "曹操出行-2行程單",
"archNo" : "0022-ZZ0100.TODO-03-006",
"archTypeCode" : "ZZ0100",
"archTypeId" : "6489894262050048",
"archTypeName" : "01 企業證照",
"archivedDate" : 1587699428000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503216857251072,
"id" : "6503214760639744",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "30年",
"savePeriodId" : "3",
"secret" : "核心商密",
"secretExpDate" : 1638633600000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000187",
"writingDate" : 1638633600000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503218290695424",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "消息接入規範",
"archNo" : "0022-ZZ0200.TODO-K093-002",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587709784000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 2,
"expDate" : 1619258366000,
"fileNo" : "",
"handlerId" : 6503218290752768,
"id" : "6503218290695424",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1808560781000,
"secretId" : "3",
"secretPeriodId" : 7,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000318",
"writingDate" : 1584547200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140862208",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200408",
"archNo" : "0022-ZZ0200.TODO-null-010",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265140927744,
"id" : "6503265140862208",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1649347200000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000768",
"writingDate" : 1649347200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140526336",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200415",
"archNo" : "0022-ZZ0200.TODO-null-011",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265411443968,
"id" : "6503265140526336",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650384000000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000769",
"writingDate" : 1650384000000,
"year" : "2020"
}
}
]
},
"aggregations" : {
"yearGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "2020",
"doc_count" : 6
}
]
},
"archTypeGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "6495573858862336",
"doc_count" : 3
},
{
"key" : "6485924961527040",
"doc_count" : 1
},
{
"key" : "6485930821313792",
"doc_count" : 1
},
{
"key" : "6489894262050048",
"doc_count" : 1
}
]
}
}
}
java springboot實現:
SearchRequest searchRequest = new SearchRequest(ermsesProperties.getIndex());
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//第一個字段進行分組
TermsAggregationBuilder yearGroupAgg = AggregationBuilders.terms("yearGroup").field("year.keyword");
//根據第二個字段進行分組
TermsAggregationBuilder archTypeGroupAgg = AggregationBuilders.terms("archTypeGroup").field("archTypeId.keyword");
//如果存在第三個,以此類推...
//只需要平級添加聚合條件即可
sourceBuilder.aggregation(yearGroupAgg);
sourceBuilder.aggregation(archTypeGroupAgg);
searchRequest.source(sourceBuilder);
第二部、實現平級+層級分組聚合
實現archTypeId和year做聚合實現平級分組,同時實現archTypeId和secret層級聚合分組(也是百度中大篇幅的層級聚合分組)。
kibana:
POST ermsftrv1/_search
{
"aggs": {
"archTypeGroup": {
"terms": {
"field": "archTypeId.keyword",
"size": 10
},
"aggs": {
"secretGroup": {
"terms": {
"field": "secret.keyword"
}
}
}
},
"yearGroup": {
"terms": {
"field": "year.keyword",
"size": 10
}
}
}
}
結果:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6502586031240448",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新建文本文檔",
"archNo" : "0022-SB0000.TODO-TODO-001",
"archTypeCode" : "SB0000",
"archTypeId" : "6485930821313792",
"archTypeName" : "設備儀器",
"archivedDate" : 1587545484000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502586302145792,
"id" : "6502586031240448",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650556800000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000722",
"writingDate" : 1650556800000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6500384144856320",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "問題",
"archNo" : "0022-JS0000-TODO.-TODO-027",
"archTypeCode" : "JS0000",
"archTypeId" : "6485924961527040",
"archTypeName" : "建設項目",
"archivedDate" : 1587548214000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502597485647104,
"id" : "6500384144856320",
"pageNum" : "1",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650038400000,
"secretId" : "2",
"secretPeriodId" : 9,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000723",
"writingDate" : 1650038400000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503214760639744",
"_score" : 1.0,
"_source" : {
"annual" : "2020",
"archName" : "曹操出行-2行程單",
"archNo" : "0022-ZZ0100.TODO-03-006",
"archTypeCode" : "ZZ0100",
"archTypeId" : "6489894262050048",
"archTypeName" : "01 企業證照",
"archivedDate" : 1587699428000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503216857251072,
"id" : "6503214760639744",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "30年",
"savePeriodId" : "3",
"secret" : "核心商密",
"secretExpDate" : 1638633600000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000187",
"writingDate" : 1638633600000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503218290695424",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "消息接入規範",
"archNo" : "0022-ZZ0200.TODO-K093-002",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587709784000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 2,
"expDate" : 1619258366000,
"fileNo" : "",
"handlerId" : 6503218290752768,
"id" : "6503218290695424",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1808560781000,
"secretId" : "3",
"secretPeriodId" : 7,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000318",
"writingDate" : 1584547200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140862208",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200408",
"archNo" : "0022-ZZ0200.TODO-null-010",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265140927744,
"id" : "6503265140862208",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1649347200000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000768",
"writingDate" : 1649347200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140526336",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200415",
"archNo" : "0022-ZZ0200.TODO-null-011",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265411443968,
"id" : "6503265140526336",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650384000000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000769",
"writingDate" : 1650384000000,
"year" : "2020"
}
}
]
},
"aggregations" : {
"yearGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "2020",
"doc_count" : 6
}
]
},
"archTypeGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "6495573858862336",
"doc_count" : 3,
"secretGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "核心商密",
"doc_count" : 2
},
{
"key" : "普通商密",
"doc_count" : 1
}
]
}
},
{
"key" : "6485924961527040",
"doc_count" : 1,
"secretGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "普通商密",
"doc_count" : 1
}
]
}
},
{
"key" : "6485930821313792",
"doc_count" : 1,
"secretGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "普通商密",
"doc_count" : 1
}
]
}
},
{
"key" : "6489894262050048",
"doc_count" : 1,
"secretGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "核心商密",
"doc_count" : 1
}
]
}
}
]
}
}
}
java實現:
SearchRequest searchRequest = new SearchRequest(ermsesProperties.getIndex());
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//第一個字段進行分組
TermsAggregationBuilder yearGroupAgg = AggregationBuilders.terms("yearGroup").field("year.keyword");
//根據第二個字段進行分組
TermsAggregationBuilder archTypeGroupAgg = AggregationBuilders.terms("archTypeGroup").field("archTypeId.keyword");
//自己聚合分組,生命方式一樣
TermsAggregationBuilder secretGroup = AggregationBuilders.terms("secretGroup").field("secret.keyword");
//只需要平級添加聚合條件即可
sourceBuilder.aggregation(yearGroupAgg);
//設置聚合分組時,同事設置子分組(子層級)
sourceBuilder.aggregation(archTypeGroupAgg.subAggregation(secretGroup));
searchRequest.source(sourceBuilder);
第三部分、script實現多字段查詢
實現archTypeId和year平級聚合分組,同事查詢出archTypeId對應的中文名稱archTypeName。其中#split#是自定義的。
kibana:
POST ermsftrv1/_search
{
"aggs": {
"archTypeGroup": {
"terms": {
"script": "doc['archTypeId.keyword'].value +'#split#'+ doc['archTypeName.keyword'].value",
"size": 10
}
},
"yearGroup": {
"terms": {
"field": "year.keyword",
"size": 10
}
}
}
}
結果:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6502586031240448",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新建文本文檔",
"archNo" : "0022-SB0000.TODO-TODO-001",
"archTypeCode" : "SB0000",
"archTypeId" : "6485930821313792",
"archTypeName" : "設備儀器",
"archivedDate" : 1587545484000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502586302145792,
"id" : "6502586031240448",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650556800000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000722",
"writingDate" : 1650556800000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6500384144856320",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "問題",
"archNo" : "0022-JS0000-TODO.-TODO-027",
"archTypeCode" : "JS0000",
"archTypeId" : "6485924961527040",
"archTypeName" : "建設項目",
"archivedDate" : 1587548214000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6502597485647104,
"id" : "6500384144856320",
"pageNum" : "1",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "hanfeixian",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650038400000,
"secretId" : "2",
"secretPeriodId" : 9,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000723",
"writingDate" : 1650038400000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503214760639744",
"_score" : 1.0,
"_source" : {
"annual" : "2020",
"archName" : "曹操出行-2行程單",
"archNo" : "0022-ZZ0100.TODO-03-006",
"archTypeCode" : "ZZ0100",
"archTypeId" : "6489894262050048",
"archTypeName" : "01 企業證照",
"archivedDate" : 1587699428000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503216857251072,
"id" : "6503214760639744",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "30年",
"savePeriodId" : "3",
"secret" : "核心商密",
"secretExpDate" : 1638633600000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000187",
"writingDate" : 1638633600000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503218290695424",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "消息接入規範",
"archNo" : "0022-ZZ0200.TODO-K093-002",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587709784000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 2,
"expDate" : 1619258366000,
"fileNo" : "",
"handlerId" : 6503218290752768,
"id" : "6503218290695424",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1808560781000,
"secretId" : "3",
"secretPeriodId" : 7,
"sectId" : "6480626827621632",
"sectName" : "新奧集團股份有限公司",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000318",
"writingDate" : 1584547200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140862208",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200408",
"archNo" : "0022-ZZ0200.TODO-null-010",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265140927744,
"id" : "6503265140862208",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "核心商密",
"secretExpDate" : 1649347200000,
"secretId" : "3",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000768",
"writingDate" : 1649347200000,
"year" : "2020"
}
},
{
"_index" : "ermsftrv1",
"_type" : "_doc",
"_id" : "6503265140526336",
"_score" : 1.0,
"_source" : {
"annual" : "",
"archName" : "新奧檔案系統-項目進度計劃-20200415",
"archNo" : "0022-ZZ0200.TODO-null-011",
"archTypeCode" : "ZZ0200",
"archTypeId" : "6495573858862336",
"archTypeName" : "02 領導證照",
"archivedDate" : 1587711282000,
"archivedDep" : "1753-11-11 00:00:00",
"archivedOperator" : "",
"documentPage" : 0,
"entityTypeId" : 1,
"expDate" : -6820704000000,
"fileNo" : "",
"handlerId" : 6503265411443968,
"id" : "6503265140526336",
"pageNum" : "0",
"picPage" : 0,
"responsibleDept" : "",
"responsibleOper" : "zhangjunk",
"savePeriod" : "永久",
"savePeriodId" : "1",
"secret" : "普通商密",
"secretExpDate" : 1650384000000,
"secretId" : "2",
"secretPeriodId" : 1,
"sectId" : "6480640146142464",
"sectName" : "新奧集團檔案局",
"sectNo" : "A0022",
"thridId" : "A0022-2020-0000000769",
"writingDate" : 1650384000000,
"year" : "2020"
}
}
]
},
"aggregations" : {
"yearGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "2020",
"doc_count" : 6
}
]
},
"archTypeGroup" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "6495573858862336#split#02 領導證照",
"doc_count" : 3
},
{
"key" : "6485924961527040#split#建設項目",
"doc_count" : 1
},
{
"key" : "6485930821313792#split#設備儀器",
"doc_count" : 1
},
{
"key" : "6489894262050048#split#01 企業證照",
"doc_count" : 1
}
]
}
}
}
java實現:
SearchRequest searchRequest = new SearchRequest(ermsesProperties.getIndex());
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//第一個字段進行分組
TermsAggregationBuilder yearGroupAgg = AggregationBuilders.terms("yearGroup").field("year.keyword");
//第二個字段進行分組,使用script方式拼接返回值,但是要保證archTypeId和archTypeName是一對一的
Script script = new Script("doc['archTypeId.keyword'].value +'#split#'+ doc['archTypeName.keyword'].value");
TermsAggregationBuilder archTypeGroupAgg = AggregationBuilders.terms("archTypeGroup").script(script);
//添加aggregation
sourceBuilder.aggregation(yearGroupAgg);
sourceBuilder.aggregation(archTypeGroupAgg);
searchRequest.source(sourceBuilder);
剛接觸es,不熟悉,最新版本的教程也不多。實際上基本是通過kibana敲命令琢磨出來的。建議裝一個kibana或者head來輔助自己熟悉es。
gogogo!