From a1e772035ab21af659528bde511197334e732870 Mon Sep 17 00:00:00 2001 From: Damien Date: Wed, 18 Feb 2026 09:09:12 -0500 Subject: [PATCH 1/5] [MODORDSTOR-407] Optimized db indices --- .../data-migration/14.0.0/update_indices.ftl | 14 + .../templates/db_scripts/po_line_table.sql | 4 +- .../db_scripts/purchase_order_table.sql | 7 + .../templates/db_scripts/schema.json | 548 +++++++++++------- .../templates/db_scripts/title_table.sql | 11 +- 5 files changed, 368 insertions(+), 216 deletions(-) create mode 100644 src/main/resources/templates/db_scripts/data-migration/14.0.0/update_indices.ftl diff --git a/src/main/resources/templates/db_scripts/data-migration/14.0.0/update_indices.ftl b/src/main/resources/templates/db_scripts/data-migration/14.0.0/update_indices.ftl new file mode 100644 index 00000000..b0feab70 --- /dev/null +++ b/src/main/resources/templates/db_scripts/data-migration/14.0.0/update_indices.ftl @@ -0,0 +1,14 @@ +<#if mode.name() == "UPDATE"> + DROP INDEX IF EXISTS po_line_po_line_number_sort; + CREATE INDEX po_line_po_line_number_sort ON ${myuniversity}_${mymodule}.po_line + (left(lower(jsonb->>'poLineNumber'),600), lower(jsonb->>'poLineNumber')); + + CREATE INDEX IF NOT EXISTS purchase_order_no_acq_unit ON ${myuniversity}_${mymodule}.purchase_order + ((lower(f_unaccent(jsonb->>'acqUnitIds')) NOT LIKE lower(f_unaccent('[]')))); + CREATE INDEX IF NOT EXISTS purchase_order_updated_date_sort ON ${myuniversity}_${mymodule}.purchase_order + (left(lower(f_unaccent(jsonb->'metadata'->>'updatedDate')), 600), + lower(f_unaccent(jsonb->'metadata'->>'updatedDate'))); + + CREATE INDEX IF NOT EXISTS titles_no_acq_unit ON ${myuniversity}_${mymodule}.titles + ((lower(f_unaccent(jsonb->>'acqUnitIds')) NOT LIKE lower(f_unaccent('[]')))); + diff --git a/src/main/resources/templates/db_scripts/po_line_table.sql b/src/main/resources/templates/db_scripts/po_line_table.sql index a6724387..fb74ad64 100644 --- a/src/main/resources/templates/db_scripts/po_line_table.sql +++ b/src/main/resources/templates/db_scripts/po_line_table.sql @@ -6,7 +6,7 @@ CREATE INDEX IF NOT EXISTS po_line_updated_date_sort ON ${myuniversity}_${mymodu lower(f_unaccent(jsonb->'metadata'->>'updatedDate'))); CREATE INDEX IF NOT EXISTS po_line_title_or_package_sort ON ${myuniversity}_${mymodule}.po_line - (left(lower(f_unaccent(jsonb->>'titleOrPackage')),600), lower(f_unaccent(po_line.jsonb->>'titleOrPackage'))); + (left(lower(f_unaccent(jsonb->>'titleOrPackage')),600), lower(f_unaccent(jsonb->>'titleOrPackage'))); CREATE INDEX IF NOT EXISTS po_line_po_line_number_sort ON ${myuniversity}_${mymodule}.po_line - (left(lower(f_unaccent(jsonb->>'poLineNumber')),600), lower(f_unaccent(po_line.jsonb->>'poLineNumber'))); + (left(lower(jsonb->>'poLineNumber'),600), lower(jsonb->>'poLineNumber')); diff --git a/src/main/resources/templates/db_scripts/purchase_order_table.sql b/src/main/resources/templates/db_scripts/purchase_order_table.sql index 826ecc88..21efbdde 100644 --- a/src/main/resources/templates/db_scripts/purchase_order_table.sql +++ b/src/main/resources/templates/db_scripts/purchase_order_table.sql @@ -3,3 +3,10 @@ CREATE UNIQUE INDEX IF NOT EXISTS purchase_order_po_number_unique_idx ON ${myuni CREATE INDEX IF NOT EXISTS purchase_order_customfields_recordservice_idx_gin ON ${myuniversity}_${mymodule}.purchase_order USING GIN ((jsonb->'customFields')); + +CREATE INDEX IF NOT EXISTS purchase_order_no_acq_unit ON ${myuniversity}_${mymodule}.purchase_order + ((lower(f_unaccent(jsonb->>'acqUnitIds')) NOT LIKE lower(f_unaccent('[]')))); + +CREATE INDEX IF NOT EXISTS purchase_order_updated_date_sort ON ${myuniversity}_${mymodule}.purchase_order + (left(lower(f_unaccent(jsonb->'metadata'->>'updatedDate')), 600), + lower(f_unaccent(jsonb->'metadata'->>'updatedDate'))); diff --git a/src/main/resources/templates/db_scripts/schema.json b/src/main/resources/templates/db_scripts/schema.json index e1c5504b..34a2cc95 100644 --- a/src/main/resources/templates/db_scripts/schema.json +++ b/src/main/resources/templates/db_scripts/schema.json @@ -205,6 +205,11 @@ "run": "after", "snippetPath": "data-migration/14.0.0/drop_internal_lock_table.ftl", "fromModuleVersion": "mod-orders-storage-14.0.0" + }, + { + "run": "after", + "snippetPath": "data-migration/14.0.0/update_indices.ftl", + "fromModuleVersion": "mod-orders-storage-14.0.0" } ], "tables": [ @@ -223,102 +228,170 @@ "customSnippetPath": "purchase_order_table.sql", "index": [ { - "fieldName": "acqUnitIds", - "caseSensitive": false + "fieldName": "approved", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'approved')", + "sqlExpressionQuery": "$" }, { "fieldName": "assignedTo", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'assignedTo')", + "sqlExpressionQuery": "$" }, { - "fieldName": "metadata.createdDate", - "caseSensitive": false + "fieldName": "billTo", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'billTo')", + "sqlExpressionQuery": "$" }, { - "fieldName": "metadata.createdByUserId", - "caseSensitive": false + "fieldName": "closeReason.reason", + "caseSensitive": true, + "removeAccents": false }, { - "fieldName": "workflowStatus", - "caseSensitive": false + "fieldName": "dateOrdered", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'dateOrdered')", + "sqlExpressionQuery": "$" }, { - "fieldName": "approved", - "caseSensitive": false + "fieldName": "ongoing.isSubscription", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'ongoing'->>'isSubscription')", + "sqlExpressionQuery": "$" }, { - "fieldName": "dateOrdered", - "caseSensitive": false + "fieldName": "metadata.createdByUserId", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'metadata'->>'createdByUserId')", + "sqlExpressionQuery": "$" }, { - "fieldName": "orderType", - "caseSensitive": false + "fieldName": "metadata.createdDate", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'metadata'->>'createdDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "reEncumber", - "caseSensitive": false + "fieldName": "metadata.updatedByUserId", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'metadata'->>'updatedByUserId')", + "sqlExpressionQuery": "$" }, { - "fieldName": "vendor", - "caseSensitive": false + "fieldName": "metadata.updatedDate", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'metadata'->>'updatedDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "renewal.manualRenewal", - "tOps": "DELETE" + "fieldName": "ongoing.manualRenewal", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'ongoing'->>'manualRenewal')", + "sqlExpressionQuery": "$" }, { - "fieldName": "renewal.renewalDate", - "tOps": "DELETE" + "fieldName": "ongoing.renewalDate", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'ongoing'->>'renewalDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "renewal.reviewPeriod", - "tOps": "DELETE" + "fieldName": "ongoing.reviewPeriod", + "caseSensitive": true, + "removeAccents": false }, { - "fieldName": "ongoing.manualRenewal", - "caseSensitive": false + "fieldName": "orderType", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'orderType')", + "sqlExpressionQuery": "$" }, { - "fieldName": "ongoing.renewalDate", - "caseSensitive": false + "fieldName": "poNumberPrefix", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'poNumberPrefix')", + "sqlExpressionQuery": "$" }, { - "fieldName": "ongoing.reviewPeriod", - "caseSensitive": false - } - ], - "fullTextIndex": [ - { - "fieldName": "closeReason.reason" + "fieldName": "poNumberSuffix", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'poNumberSuffix')", + "sqlExpressionQuery": "$" }, { - "fieldName": "closeReason.note" + "fieldName": "reEncumber", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'reEncumber')", + "sqlExpressionQuery": "$" }, { - "fieldName": "acqUnitIds" + "fieldName": "shipTo", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'shipTo')", + "sqlExpressionQuery": "$" }, { - "fieldName": "orderType" + "fieldName": "vendor", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'vendor')", + "sqlExpressionQuery": "$" }, { - "fieldName": "workflowStatus" + "fieldName": "workflowStatus", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'workflowStatus')", + "sqlExpressionQuery": "$" } ], - "ginIndex": [ + "fullTextIndex": [ { - "fieldName": "poNumber", + "fieldName": "acqUnitIds", "caseSensitive": false, - "removeAccents": true + "removeAccents": false }, { - "fieldName": "dateOrdered", + "fieldName": "keyword", "caseSensitive": false, - "removeAccents": true + "removeAccents": false, + "multiFieldNames": "metadata.createdDate,dateOrdered,poNumber" + } + ], + "ginIndex": [ + { + "fieldName": "dateOrdered", + "caseSensitive": true, + "removeAccents": false }, { "fieldName": "metadata.createdDate", + "caseSensitive": true, + "removeAccents": false + }, + { + "fieldName": "poNumber", "caseSensitive": false, - "removeAccents": true + "removeAccents": false } ] }, @@ -337,117 +410,174 @@ ], "index": [ { - "fieldName": "eresource.accessProvider", - "caseSensitive": false - }, - { - "fieldName": "eresource.activated", - "caseSensitive": false + "fieldName": "acquisitionMethod", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'acquisitionMethod')", + "sqlExpressionQuery": "$" }, { - "fieldName": "eresource.expectedActivation", - "caseSensitive": false + "fieldName": "claim.grace", + "caseSensitive": true, + "removeAccents": false }, { - "fieldName": "eresource.trial", - "caseSensitive": false + "fieldName": "claim.sent", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'claim'->>'sent')", + "sqlExpressionQuery": "$" }, { - "fieldName": "eresource.materialType", - "caseSensitive": false + "fieldName": "collection", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'collection')", + "sqlExpressionQuery": "$" }, { "fieldName": "details.subscriptionFrom", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'details'->>'subscriptionFrom')", + "sqlExpressionQuery": "$" }, { "fieldName": "details.subscriptionTo", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'details'->>'subscriptionTo')", + "sqlExpressionQuery": "$" }, { - "fieldName": "location.locationId", - "caseSensitive": false + "fieldName": "eresource.accessProvider", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'eresource'->>'accessProvider')", + "sqlExpressionQuery": "$" }, { - "fieldName": "location.holdingId", - "caseSensitive": false + "fieldName": "eresource.activated", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'eresource'->>'activated')", + "sqlExpressionQuery": "$" }, { - "fieldName": "physical.receiptDue", - "caseSensitive": false + "fieldName": "eresource.expectedActivation", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'eresource'->>'expectedActivation')", + "sqlExpressionQuery": "$" }, { - "fieldName": "physical.expectedReceiptDate", - "caseSensitive": false + "fieldName": "eresource.materialType", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'eresource'->>'materialType')", + "sqlExpressionQuery": "$" }, { - "fieldName": "physical.volumes", - "caseSensitive": false + "fieldName": "eresource.trial", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'eresource'->>'trial')", + "sqlExpressionQuery": "$" }, { - "fieldName": "physical.materialType", - "caseSensitive": false + "fieldName": "metadata.createdDate", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'metadata'->>'createdDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "claim.grace", - "caseSensitive": false + "fieldName": "orderFormat", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'orderFormat')", + "sqlExpressionQuery": "$" }, { - "fieldName": "claim.sent", - "caseSensitive": false + "fieldName": "packagePoLineId", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'packagePoLineId')", + "sqlExpressionQuery": "$" }, { - "fieldName": "collection", - "caseSensitive": false + "fieldName": "paymentStatus", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'paymentStatus')", + "sqlExpressionQuery": "$" }, { - "fieldName": "receiptStatus", - "caseSensitive": false + "fieldName": "physical.expectedReceiptDate", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'physical'->>'expectedReceiptDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "paymentStatus", - "caseSensitive": false + "fieldName": "physical.materialType", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'physical'->>'materialType')", + "sqlExpressionQuery": "$" }, { - "fieldName": "orderFormat", - "caseSensitive": false + "fieldName": "physical.receiptDue", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->'physical'->>'receiptDue')", + "sqlExpressionQuery": "$" }, { "fieldName": "receiptDate", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'receiptDate')", + "sqlExpressionQuery": "$" }, { - "fieldName": "metadata.createdDate", - "caseSensitive": false + "fieldName": "receiptStatus", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'receiptStatus')", + "sqlExpressionQuery": "$" }, { "fieldName": "rush", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'rush')", + "sqlExpressionQuery": "$" }, { "fieldName": "source", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'source')", + "sqlExpressionQuery": "$" } ], "fullTextIndex": [ { - "fieldName": "publisher", - "tOps": "DELETE" + "fieldName": "contributorName", + "caseSensitive": false, + "removeAccents": true, + "multiFieldNames": "contributors[*].contributor" }, { "fieldName": "donor", - "tOps": "DELETE" - }, - { - "fieldName": "selector", - "tOps": "DELETE" + "caseSensitive": false, + "removeAccents": true }, { - "fieldName": "vendorDetail.referenceNumbers", + "fieldName": "donorOrganizationIds", "caseSensitive": false, - "removeAccents": true, - "arraySubfield": "refNumber", - "arrayModifiers": ["refNumberType", "vendorDetailsSource"] + "removeAccents": false }, { "fieldName": "fundDistribution", @@ -456,6 +586,12 @@ "arraySubfield": "fundId", "arrayModifiers": ["fundId"] }, + { + "fieldName": "keyword", + "caseSensitive": false, + "removeAccents": true, + "multiFieldNames": "contributors[*].contributor,poLineNumber,requester,titleOrPackage,publisher,vendorDetail.vendorAccount,vendorDetail.referenceNumbers[*].refNumber,donor,selector,physical.volumes[*],details.productIds[*].productId" + }, { "fieldName": "locations", "caseSensitive": false, @@ -464,97 +600,73 @@ "arrayModifiers": ["holdingId"] }, { - "fieldName": "orderFormat", + "fieldName": "physicalVolumes", "caseSensitive": false, - "removeAccents": true + "removeAccents": true, + "multiFieldNames": "physical.volumes[*]" }, { "fieldName": "productIds", - "multiFieldNames": "details.productIds[*].productId" - } - ], - "ginIndex": [ - { - "fieldName": "fundDistribution", "caseSensitive": false, - "removeAccents": true + "removeAccents": false, + "multiFieldNames": "details.productIds[*].productId" }, { - "fieldName": "details.productIds", + "fieldName": "publisher", "caseSensitive": false, "removeAccents": true }, { - "fieldName": "donorOrganizationIds", + "fieldName": "requester", "caseSensitive": false, "removeAccents": true }, { - "fieldName": "title", - "tOps": "DELETE" - }, - { - "fieldName": "titleOrPackage", + "fieldName": "searchLocations", "caseSensitive": false, - "removeAccents": true, - "tOps": "ADD" + "removeAccents": false, + "multiFieldNames": "locations[*].holdingId,searchLocationIds[*]" }, { - "fieldName": "vendorDetail.vendorAccount", + "fieldName": "selector", "caseSensitive": false, "removeAccents": true }, { - "fieldName": "tags", + "fieldName": "tags.tagList", "caseSensitive": false, "removeAccents": true }, { - "fieldName": "contributors", + "fieldName": "titleOrPackage", "caseSensitive": false, "removeAccents": true }, { - "fieldName": "requester", + "fieldName": "vendorDetail.referenceNumbers", "caseSensitive": false, - "removeAccents": true - }, + "removeAccents": false, + "arraySubfield": "refNumber", + "arrayModifiers": ["refNumberType", "vendorDetailsSource"] + } + ], + "ginIndex": [ { "fieldName": "poLineNumber", "caseSensitive": false, - "removeAccents": true - }, - { - "fieldName": "publisher", - "caseSensitive": false, - "removeAccents": true + "removeAccents": false }, { - "fieldName": "donor", + "fieldName": "vendorDetail.vendorAccount", "caseSensitive": false, - "removeAccents": true - }, - { - "fieldName": "selector", - "caseSensitive": false, - "removeAccents": true + "removeAccents": false }, { "fieldName": "vendorDetail.referenceNumbers", "caseSensitive": false, - "removeAccents": true, + "removeAccents": false, "arraySubfield": "refNumber", "arrayModifiers": ["refNumberType", "vendorDetailsSource"] - }, - { - "fieldName": "physical.volumes", - "caseSensitive": false, - "removeAccents": true - }, - { - "fieldName": "searchLocationIds", - "caseSensitive": false, - "removeAccents": true } ] }, @@ -567,8 +679,7 @@ "fieldName": "poLineId", "targetTable": "po_line", "targetTableAlias": "poLine", - "tableAlias": "titles", - "tOps": "ADD" + "tableAlias": "titles" }, { "targetPath": ["poLineId", "purchaseOrderId"], @@ -578,22 +689,37 @@ } ], "index": [ - { - "fieldName": "acqUnitIds", - "caseSensitive": false - }, { "fieldName": "claimingActive", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'claimingActive')", + "sqlExpressionQuery": "$" }, { "fieldName": "instanceId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'instanceId')", + "sqlExpressionQuery": "$" } ], "fullTextIndex": [ { - "fieldName": "acqUnitIds" + "fieldName": "acqUnitIds", + "caseSensitive": false, + "removeAccents": false + }, + { + "fieldName": "productIds", + "caseSensitive": false, + "removeAccents": false, + "multiFieldNames": "productIds[*].productId" + }, + { + "fieldName": "title", + "caseSensitive": false, + "removeAccents": true } ] }, @@ -612,8 +738,7 @@ "fieldName": "titleId", "targetTable": "titles", "targetTableAlias": "titles", - "tableAlias": "pieces", - "tOps": "ADD" + "tableAlias": "pieces" }, { "targetPath": ["poLineId", "purchaseOrderId"], @@ -623,56 +748,40 @@ } ], "index": [ - { - "fieldName": "format", - "caseSensitive": false - }, { "fieldName": "itemId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'itemId')", + "sqlExpressionQuery": "$" }, { "fieldName": "locationId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'locationId')", + "sqlExpressionQuery": "$" }, { "fieldName": "holdingId", - "caseSensitive": false - }, - { - "fieldName": "receivingStatus", - "caseSensitive": false - }, - { - "fieldName": "receivedDate", - "caseSensitive": false - }, - { - "fieldName": "supplement", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'holdingId')", + "sqlExpressionQuery": "$" }, { "fieldName": "bindItemId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'bindItemId')", + "sqlExpressionQuery": "$" }, { "fieldName": "receivingTenantId", - "caseSensitive": false - } - ], - "fullTextIndex": [ - { - "fieldName": "comment" - }, - { - "fieldName": "receivingStatus" - } - ], - "ginIndex": [ - { - "fieldName": "displaySummary", - "caseSensitive": false, - "removeAccents": true + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'receivingTenantId')", + "sqlExpressionQuery": "$" } ] }, @@ -683,14 +792,18 @@ "uniqueIndex": [ { "fieldName": "purchaseOrderId_invoiceId", - "multiFieldNames": "purchaseOrderId,invoiceId", - "tOps": "ADD" + "caseSensitive": true, + "removeAccents": false, + "multiFieldNames": "purchaseOrderId,invoiceId" } ], "index": [ { "fieldName" : "invoiceId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'invoiceId')", + "sqlExpressionQuery": "$" } ], "foreignKeys": [ @@ -698,8 +811,7 @@ "fieldName": "purchaseOrderId", "targetTable": "purchase_order", "tableAlias": "orderInvoiceRel", - "targetTableAlias": "purchase_order", - "tOps": "ADD" + "targetTableAlias": "purchase_order" } ] }, @@ -709,21 +821,30 @@ "withMetadata": true, "uniqueIndex": [ { - "fieldName" : "name" + "fieldName" : "name" } ], "index": [ { "fieldName": "isDeleted", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'isDeleted')", + "sqlExpressionQuery": "$" }, { "fieldName": "protectRead", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'protectRead')", + "sqlExpressionQuery": "$" }, { "fieldName": "protectCreate", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'protectCreate')", + "sqlExpressionQuery": "$" } ] }, @@ -743,7 +864,11 @@ ], "index": [ { - "fieldName" : "userId" + "fieldName" : "userId", + "caseSensitive": true, + "removeAccents": false, + "sqlExpression": "(jsonb->>'userId')", + "sqlExpressionQuery": "$" } ] }, @@ -812,20 +937,22 @@ "index": [ { "fieldName": "exportDate", - "caseSensitive": false + "caseSensitive": false, + "removeAccents": false } ], "uniqueIndex": [ { "fieldName": "exportJobId", - "caseSensitive": false + "caseSensitive": true, + "removeAccents": false } ], - "ginIndex": [ + "fullTextIndex": [ { "fieldName": "exportedPoLineIds", "caseSensitive": false, - "removeAccents": true + "removeAccents": false } ] }, @@ -857,7 +984,8 @@ "uniqueIndex": [ { "fieldName": "key", - "caseSensitive": false + "caseSensitive": false, + "removeAccents": false } ] } diff --git a/src/main/resources/templates/db_scripts/title_table.sql b/src/main/resources/templates/db_scripts/title_table.sql index 308361ea..8efd6067 100644 --- a/src/main/resources/templates/db_scripts/title_table.sql +++ b/src/main/resources/templates/db_scripts/title_table.sql @@ -1,11 +1,14 @@ CREATE INDEX IF NOT EXISTS titles_title_sort ON ${myuniversity}_${mymodule}.titles - (left(lower(f_unaccent(titles.jsonb->>'title')), 600), lower(f_unaccent(titles.jsonb->>'title'))); + (left(lower(f_unaccent(jsonb->>'title')), 600), lower(f_unaccent(jsonb->>'title'))); CREATE INDEX IF NOT EXISTS titles_po_line_number_sort ON ${myuniversity}_${mymodule}.titles - (left(lower(f_unaccent(titles.jsonb->>'poLineNumber')), 600), lower(f_unaccent(titles.jsonb->>'poLineNumber'))); + (left(lower(f_unaccent(jsonb->>'poLineNumber')), 600), lower(f_unaccent(jsonb->>'poLineNumber'))); CREATE INDEX IF NOT EXISTS titles_receiving_note_sort ON ${myuniversity}_${mymodule}.titles - (left(lower(f_unaccent(titles.jsonb->'poLine'->>'receivingNote')), 600), lower(f_unaccent(titles.jsonb->'poLine'->>'receivingNote'))); + (left(lower(f_unaccent(jsonb->'poLine'->>'receivingNote')), 600), lower(f_unaccent(jsonb->'poLine'->>'receivingNote'))); CREATE INDEX IF NOT EXISTS titles_package_sort ON ${myuniversity}_${mymodule}.titles - (left(lower(f_unaccent(titles.jsonb->'poLine'->>'titleOrPackage')), 600), lower(f_unaccent(titles.jsonb->'poLine'->>'titleOrPackage'))); + (left(lower(f_unaccent(jsonb->'poLine'->>'titleOrPackage')), 600), lower(f_unaccent(jsonb->'poLine'->>'titleOrPackage'))); + +CREATE INDEX IF NOT EXISTS titles_no_acq_unit ON ${myuniversity}_${mymodule}.titles + ((lower(f_unaccent(jsonb->>'acqUnitIds')) NOT LIKE lower(f_unaccent('[]')))); From 5066ec24b59caec3d8a231b737acb9288233b194 Mon Sep 17 00:00:00 2001 From: Damien Guillaume Date: Wed, 18 Feb 2026 15:23:37 -0500 Subject: [PATCH 2/5] [MODORDSTOR-407] Removed purchase order keyword index --- src/main/resources/templates/db_scripts/schema.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/resources/templates/db_scripts/schema.json b/src/main/resources/templates/db_scripts/schema.json index 34a2cc95..d10515a9 100644 --- a/src/main/resources/templates/db_scripts/schema.json +++ b/src/main/resources/templates/db_scripts/schema.json @@ -369,12 +369,6 @@ "fieldName": "acqUnitIds", "caseSensitive": false, "removeAccents": false - }, - { - "fieldName": "keyword", - "caseSensitive": false, - "removeAccents": false, - "multiFieldNames": "metadata.createdDate,dateOrdered,poNumber" } ], "ginIndex": [ From c94b24a1d1bcac1d55031990758fe1d4fef72689 Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 19 Feb 2026 09:24:09 -0500 Subject: [PATCH 3/5] [MODORDSTOR-407] Removed sqlExpression for date greater than/less than comparisons (RMB issue) --- .../resources/templates/db_scripts/schema.json | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/resources/templates/db_scripts/schema.json b/src/main/resources/templates/db_scripts/schema.json index d10515a9..84610830 100644 --- a/src/main/resources/templates/db_scripts/schema.json +++ b/src/main/resources/templates/db_scripts/schema.json @@ -256,9 +256,7 @@ { "fieldName": "dateOrdered", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->>'dateOrdered')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "ongoing.isSubscription", @@ -277,9 +275,7 @@ { "fieldName": "metadata.createdDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'metadata'->>'createdDate')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "metadata.updatedByUserId", @@ -291,9 +287,7 @@ { "fieldName": "metadata.updatedDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'metadata'->>'updatedDate')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "ongoing.manualRenewal", @@ -305,9 +299,7 @@ { "fieldName": "ongoing.renewalDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'ongoing'->>'renewalDate')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "ongoing.reviewPeriod", From 14653ed5cd39cc11495a2c3ad31473bb2283046f Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 19 Feb 2026 09:52:52 -0500 Subject: [PATCH 4/5] [MODORDSTOR-407] More date fixes; added lastEDIExportDate --- .../templates/db_scripts/schema.json | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/resources/templates/db_scripts/schema.json b/src/main/resources/templates/db_scripts/schema.json index 84610830..f0ad8a05 100644 --- a/src/main/resources/templates/db_scripts/schema.json +++ b/src/main/resources/templates/db_scripts/schema.json @@ -424,16 +424,12 @@ { "fieldName": "details.subscriptionFrom", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'details'->>'subscriptionFrom')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "details.subscriptionTo", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'details'->>'subscriptionTo')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "eresource.accessProvider", @@ -452,9 +448,7 @@ { "fieldName": "eresource.expectedActivation", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'eresource'->>'expectedActivation')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "eresource.materialType", @@ -470,12 +464,20 @@ "sqlExpression": "(jsonb->'eresource'->>'trial')", "sqlExpressionQuery": "$" }, + { + "fieldName": "lastEDIExportDate", + "caseSensitive": true, + "removeAccents": false + }, { "fieldName": "metadata.createdDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'metadata'->>'createdDate')", - "sqlExpressionQuery": "$" + "removeAccents": false + }, + { + "fieldName": "metadata.updatedDate", + "caseSensitive": true, + "removeAccents": false }, { "fieldName": "orderFormat", @@ -501,9 +503,7 @@ { "fieldName": "physical.expectedReceiptDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'physical'->>'expectedReceiptDate')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "physical.materialType", @@ -515,16 +515,12 @@ { "fieldName": "physical.receiptDue", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->'physical'->>'receiptDue')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "receiptDate", "caseSensitive": true, - "removeAccents": false, - "sqlExpression": "(jsonb->>'receiptDate')", - "sqlExpressionQuery": "$" + "removeAccents": false }, { "fieldName": "receiptStatus", From d4000e6f951fa0137dcded1644c9fabc5d01b5d1 Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 19 Feb 2026 11:46:50 -0500 Subject: [PATCH 5/5] [MODORDSTOR-407] Added more indices for fields like poNumber --- .../templates/db_scripts/schema.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/resources/templates/db_scripts/schema.json b/src/main/resources/templates/db_scripts/schema.json index 3eefe572..c8920907 100644 --- a/src/main/resources/templates/db_scripts/schema.json +++ b/src/main/resources/templates/db_scripts/schema.json @@ -313,6 +313,13 @@ "sqlExpression": "(jsonb->>'orderType')", "sqlExpressionQuery": "$" }, + { + "fieldName": "poNumber", + "caseSensitive": false, + "removeAccents": false, + "sqlExpression": "(jsonb->>'poNumber')", + "sqlExpressionQuery": "$" + }, { "fieldName": "poNumberPrefix", "caseSensitive": true, @@ -517,6 +524,13 @@ "caseSensitive": true, "removeAccents": false }, + { + "fieldName": "poLineNumber", + "caseSensitive": false, + "removeAccents": false, + "sqlExpression": "(jsonb->>'poLineNumber')", + "sqlExpressionQuery": "$" + }, { "fieldName": "receiptDate", "caseSensitive": true, @@ -542,6 +556,13 @@ "removeAccents": false, "sqlExpression": "(jsonb->>'source')", "sqlExpressionQuery": "$" + }, + { + "fieldName": "vendorDetail.vendorAccount", + "caseSensitive": false, + "removeAccents": false, + "sqlExpression": "(jsonb->'vendorDetail'->>'vendorAccount')", + "sqlExpressionQuery": "$" } ], "fullTextIndex": [