Java+springboot+elasticsearch7.6.2實現分組查詢(平級+層級)並實現script多字段拼接查詢

Java+springboot+elasticsearch7.6.2實現分組查詢(平級+層級)並實現script多字段拼接查詢

簡介:關於elasticsearch的“層級”聚合,百度一下有一大堆文章。這裏不再囉嗦了,由於百度了三個小時,也沒找到我想要的"平級"查詢的方法,最後還是自己研究源碼整除來的,其實就是那麼那麼簡單,只是沒有例子,就不好整。上乾貨。

注:對es裏的專業用語不熟,所以這裏用的"平級","層級"兩個測只是形象詞語,不是es專業叫法。。。知道叫法的請留言告知。

目錄

Java+springboot+elasticsearch7.6.2實現分組查詢(平級+層級)並實現script多字段拼接查詢

第一步、 實現平級搜索。

第二部、實現平級+層級分組聚合

第三部分、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!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章