]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CB-26: Add denormalized field for content fields (#394)
authorMichael Ritter <mikejritter@users.noreply.github.com>
Fri, 1 Mar 2024 00:21:57 +0000 (17:21 -0700)
committerGitHub <noreply@github.com>
Fri, 1 Mar 2024 00:21:57 +0000 (19:21 -0500)
3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java
services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml
services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml
services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml
services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml

index b5de58555a2d25392c8b8bcc5ef1d14cee5f88fb..43d242e2c157069d3190aef53d74bd7e4ac5a39f 100644 (file)
@@ -60,6 +60,7 @@ public class DefaultESDocumentWriter extends JsonESDocumentWriter {
                        denormMediaRecords(session, csid, tenantId, denormValues);
                        denormAcquisitionRecords(session, csid, tenantId, denormValues);
                        denormExhibitionRecords(session, csid, tenantId, denormValues);
+                       denormConceptFields(doc, denormValues);
                        denormMaterialFields(doc, denormValues);
                        denormObjectNameFields(doc, denormValues);
 
@@ -253,6 +254,35 @@ private void denormExhibitionRecords(CoreSession session, String csid, String te
                denormValues.putArray("objectNameList").addAll(denormObjectNames);
        }
 
+       /**
+        * Denormalize the content concept, content event, content person, and content organization
+        * fields for a collectionobject so that they are indexed under a single field
+        *
+        * @param doc the collectionobject document
+        * @param denormValues the json node for denormalized fields
+        */
+       private void denormConceptFields(final DocumentModel doc, final ObjectNode denormValues) {
+               final List<JsonNode> denormContentSubject = new ArrayList<>();
+               final List<String> fields = Arrays.asList("contentConcepts",
+                       "contentEvents",
+                       "contentPersons",
+                       "contentOrganizations");
+
+               for (String field : fields) {
+                       List<String> contentList = (List<String>) doc.getProperty("collectionobjects_common", field);
+
+                       for (String content  : contentList) {
+                               if (content != null) {
+                                       final ObjectNode node = objectMapper.createObjectNode();
+                                       node.put("subject", RefNameUtils.getDisplayName(content));
+                                       denormContentSubject.add(node);
+                               }
+                       }
+               }
+
+               denormValues.putArray("contentSubjectList").addAll(denormContentSubject);
+       }
+
        /**
         * Compute a title for the public browser. This needs to be indexed in ES so that it can
         * be used for sorting. (Even if it's just extracting the primary value.)
index 08380961d54111d9579af3738dfecde38b24a863..ac1a2ebbf14a6628c8300dd602623071df621bbb 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:contentSubjectList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "subject": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",
index 6b0e206f4b206eeb4cc7be09908e66897dfe7e1a..c37742173fb25857f2ace55c73f97d2959657b50 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:contentSubjectList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "subject": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",
index 75aa8d91564db56717427e1ce6f874485c18f1f5..58b2bf1b9760ad4e85e0ac5b52a96e33a6a32673 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:contentSubjectList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "subject": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",
index cb233e4b98b708b9ba6856c0f36e513cdd44c8e6..a2b0cf180317406c19972b678df4673834d101b9 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:contentSubjectList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "subject": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",