From b131dbe9728a4229333a0b56b32d64c60ddd3572 Mon Sep 17 00:00:00 2001 From: Michael Ritter Date: Thu, 29 Feb 2024 17:21:57 -0700 Subject: [PATCH] CB-26: Add denormalized field for content fields (#394) --- .../DefaultESDocumentWriter.java | 30 +++++++++++++++++++ .../anthro/anthro-tenant-bindings.delta.xml | 9 ++++++ .../bonsai/bonsai-tenant-bindings.delta.xml | 9 ++++++ .../fcart/fcart-tenant-bindings.delta.xml | 9 ++++++ .../tenants/tenant-bindings-proto-unified.xml | 9 ++++++ 5 files changed, 66 insertions(+) diff --git a/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java b/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java index b5de58555..43d242e2c 100644 --- a/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java +++ b/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java @@ -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 denormContentSubject = new ArrayList<>(); + final List fields = Arrays.asList("contentConcepts", + "contentEvents", + "contentPersons", + "contentOrganizations"); + + for (String field : fields) { + List contentList = (List) 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.) diff --git a/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml index 08380961d..ac1a2ebbf 100644 --- a/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml @@ -150,6 +150,15 @@ } } }, + "collectionspace_denorm:contentSubjectList": { + "type": "object", + "properties": { + "subject": { + "type": "keyword", + "copy_to": "all_field" + } + } + }, "collectionobjects_common:objectNumber": { "type": "keyword", diff --git a/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml index 6b0e206f4..c37742173 100644 --- a/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml @@ -140,6 +140,15 @@ } } }, + "collectionspace_denorm:contentSubjectList": { + "type": "object", + "properties": { + "subject": { + "type": "keyword", + "copy_to": "all_field" + } + } + }, "collectionobjects_common:objectNumber": { "type": "keyword", diff --git a/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml index 75aa8d915..58b2bf1b9 100644 --- a/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml @@ -141,6 +141,15 @@ } } }, + "collectionspace_denorm:contentSubjectList": { + "type": "object", + "properties": { + "subject": { + "type": "keyword", + "copy_to": "all_field" + } + } + }, "collectionobjects_common:objectNumber": { "type": "keyword", diff --git a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml index cb233e4b9..a2b0cf180 100644 --- a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml +++ b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml @@ -1275,6 +1275,15 @@ } } }, + "collectionspace_denorm:contentSubjectList": { + "type": "object", + "properties": { + "subject": { + "type": "keyword", + "copy_to": "all_field" + } + } + }, "collectionobjects_common:objectNumber": { "type": "keyword", -- 2.47.3