From 0ebfca14b5d972750a66de4f79244a5d2122a401 Mon Sep 17 00:00:00 2001 From: Michael Ritter Date: Wed, 29 Nov 2023 15:48:58 -0500 Subject: [PATCH] CB-23: Add denormalized objectName to capture controlled terms (#377) --- .../DefaultESDocumentWriter.java | 32 +++++++++++++++++++ .../anthro/anthro-tenant-bindings.delta.xml | 9 ++++++ .../fcart/fcart-tenant-bindings.delta.xml | 9 ++++++ .../tenants/tenant-bindings-proto-unified.xml | 9 ++++++ 4 files changed, 59 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 91fb3432a..b5de58555 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 @@ -61,6 +61,7 @@ public class DefaultESDocumentWriter extends JsonESDocumentWriter { denormAcquisitionRecords(session, csid, tenantId, denormValues); denormExhibitionRecords(session, csid, tenantId, denormValues); denormMaterialFields(doc, denormValues); + denormObjectNameFields(doc, denormValues); // Compute the title of the record for the public browser, and store it so that it can // be used for sorting ES query results. @@ -221,6 +222,37 @@ private void denormExhibitionRecords(CoreSession session, String csid, String te denormValues.putArray("materialGroupList").addAll(denormMaterials); } + /** + * Denormalize the object name group list for a collectionobject in order to index the controlled and + * uncontrolled terms + * + * @param doc the collectionobject document + * @param denormValues the json node for denormalized fields + */ + private void denormObjectNameFields(DocumentModel doc, ObjectNode denormValues) { + List> objectNameList = + (List>) doc.getProperty("collectionobjects_common", "objectNameList"); + + List denormObjectNames = new ArrayList<>(); + for (Map objectNameGroup : objectNameList) { + String controlledName = (String) objectNameGroup.get("objectNameControlled"); + if (controlledName != null) { + final ObjectNode node = objectMapper.createObjectNode(); + node.put("objectName", RefNameUtils.getDisplayName(controlledName)); + denormObjectNames.add(node); + } + + String objectName = (String) objectNameGroup.get("objectName"); + if (objectName != null) { + final ObjectNode node = objectMapper.createObjectNode(); + node.put("objectName", objectName); + denormObjectNames.add(node); + } + } + + denormValues.putArray("objectNameList").addAll(denormObjectNames); + } + /** * 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 6274f264b..8b65e1837 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 @@ -132,6 +132,15 @@ } } }, + "collectionspace_denorm:objectNameList": { + "type": "object", + "properties": { + "objectName": { + "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 a91f23fd4..103088c03 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 @@ -123,6 +123,15 @@ } } }, + "collectionspace_denorm:objectNameList": { + "type": "object", + "properties": { + "objectName": { + "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 bef66254f..6e3c474b2 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 @@ -1238,6 +1238,15 @@ } } }, + "collectionspace_denorm:objectNameList": { + "type": "object", + "properties": { + "objectName": { + "type": "keyword", + "copy_to": "all_field" + } + } + }, "collectionobjects_common:objectNumber": { "type": "keyword", -- 2.47.3