From 289c78a49ca5fe4e3b9748594d709532b023c649 Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Fri, 11 Jun 2021 15:02:11 +0200
Subject: [PATCH] mc

---
 .../textgrid/middleware/SetDeliverer.java     | 34 ++++++++++++-------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
index 5b8f3b83..d13006ae 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
@@ -39,6 +39,9 @@ public class SetDeliverer {
   private static final int DH_SIZE = 100000;
   private static final int TG_SIZE = 1000;
 
+  private static final String DH_COLLECTION_FILTER_NAME = "collectionFilter";
+  private static final String DH_COLLECTION_FILTER_TERM_NAME = "collectionFilterTerm";
+
   // private static Map<String, String> setSet = new Hashtable<String, String>();
 
   private Set<String> identifier = new LinkedHashSet<String>();
@@ -124,19 +127,22 @@ public class SetDeliverer {
 
       Script collectionID = new Script("doc['administrativeMetadata.dcterms:identifier']");
 
-      AggregationBuilder filterCollections = AggregationBuilders.filter("collectionFilter",
+      // Do filter all collections (via descriptiveMetadata.dc:format) AND
+      // get out all the child objects and collections (NO descriptiveMetadata.dc:relation),
+      // so we get exactly one set per root collection only!
+      AggregationBuilder collectionFilter = AggregationBuilders.filter(DH_COLLECTION_FILTER_NAME,
           QueryBuilders.boolQuery()
               .mustNot(QueryBuilders.existsQuery("descriptiveMetadata.dc:relation"))
               .must(QueryBuilders.matchPhraseQuery("descriptiveMetadata.dc:format",
                   TextGridMimetypes.DARIAH_COLLECTION)));
 
-      AggregationBuilder filterTerm = AggregationBuilders.terms("collectionTerm")
-          .script(collectionID)
-          .size(DH_SIZE);
-
-      filterCollections.subAggregation(filterTerm);
+      AggregationBuilder collectionFilterTerm =
+          AggregationBuilders.terms(DH_COLLECTION_FILTER_TERM_NAME)
+              .script(collectionID)
+              .size(DH_SIZE);
 
-      searchSourceBuilder.aggregation(filterCollections);
+      collectionFilter.subAggregation(collectionFilterTerm);
+      searchSourceBuilder.aggregation(collectionFilter);
     }
 
     // FIXME Where do we need THIS?
@@ -222,14 +228,16 @@ public class SetDeliverer {
 
           System.out.println("  ##  entry key  -->  " + entry.getKey());
 
-          if (name.equals("collectionFilter")) {
-            // Filter trytry = getRecordListItems.getAggregations().get("projectsPublic");
-            // Terms trytry2 = trytry.getAggregations().get("projects");
-            Filter filterCollection = getRecordListItems.getAggregations().get("collectionFilter");
-            Terms collectionTerms = filterCollection.getAggregations().get("collectionTerm");
+          if (name.equals(DH_COLLECTION_FILTER_NAME)) {
+            Filter filterCollection =
+                getRecordListItems.getAggregations().get(DH_COLLECTION_FILTER_NAME);
+            Terms collectionTerms =
+                filterCollection.getAggregations().get(DH_COLLECTION_FILTER_TERM_NAME);
             for (Bucket b : collectionTerms.getBuckets()) {
 
-              System.out.println("  ##  ID  -->  " + b.getKeyAsString());
+              System.out.println("  ##  key  -->  " + b.getKey().toString());
+              System.out.println("  ##  kas  -->  " + b.getKeyAsString());
+              System.out.println("  ##  map  -->  " + b.getAggregations().getAsMap());
 
               SetType newSet = new SetType();
               newSet.setSetSpec(b.getKeyAsString());
-- 
GitLab