From 11900f1b459ea840fad3e0e30e14a1d93578c7aa Mon Sep 17 00:00:00 2001 From: Dusty Cartwright Date: Fri, 14 Nov 2025 14:16:14 -0800 Subject: [PATCH 1/4] add boolean search to collection search #405 --- .../client/public/lib/services/CollectionService.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/fin/ucd-lib-client/client/public/lib/services/CollectionService.js b/services/fin/ucd-lib-client/client/public/lib/services/CollectionService.js index 421cbe82..31f37f62 100644 --- a/services/fin/ucd-lib-client/client/public/lib/services/CollectionService.js +++ b/services/fin/ucd-lib-client/client/public/lib/services/CollectionService.js @@ -81,6 +81,8 @@ class CollectionService extends BaseService { searchDocument.textFields = config.elasticSearch.textFields.collection; searchDocument.limit = 1000; + + searchDocument['simple_query_string'] = true; let id = await digest(searchDocument); From dabffa849cc9f01eeb1cb554de5af4c12fb0ccc2 Mon Sep 17 00:00:00 2001 From: Dusty Cartwright Date: Fri, 14 Nov 2025 15:31:00 -0800 Subject: [PATCH 2/4] change recent collections sort to use expanded datePublished field (req. new index) #406 --- services/fin/models/collection/schema.json | 7 ++++++- .../client/public/elements/utils/app-browse-by.js | 5 +---- services/fin/ucd-lib-client/client/public/lib/config.js | 9 ++++++++- .../client/public/lib/models/CollectionModel.js | 7 +++---- services/fin/ucd-lib-client/config.js | 4 ++++ services/fin/ucd-lib-client/controllers/static.js | 1 + 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/services/fin/models/collection/schema.json b/services/fin/models/collection/schema.json index bfb10b04..bc705735 100644 --- a/services/fin/models/collection/schema.json +++ b/services/fin/models/collection/schema.json @@ -32,7 +32,12 @@ } } }, - + + "@graph.datePublished" : { + "type" : "date", + "format": "yyyy-MM-dd||yyyy-MM||yyyy" + }, + "@graph.yearPublished" : { "type" : "integer" }, diff --git a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js index e8aef24d..0b7a9d5c 100644 --- a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js +++ b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js @@ -300,10 +300,7 @@ export default class AppBrowseBy extends Mixin(LitElement) if( sortBy.label === 'A-Z' ) { sort = {"name" : "asc"}; } else if( sortBy.label === 'Recent' ) { - sort = [ - {'@graph.yearPublished': {order : "desc" }}, - {'@graph.lastModified': {order : "desc" }} - ]; + sort = config.elasticSearch.textFields.recentCollectionSortBy; } else { sort = {"@graph.itemCount" : "desc"}; } diff --git a/services/fin/ucd-lib-client/client/public/lib/config.js b/services/fin/ucd-lib-client/client/public/lib/config.js index 5ca7a90c..0e4ee526 100644 --- a/services/fin/ucd-lib-client/client/public/lib/config.js +++ b/services/fin/ucd-lib-client/client/public/lib/config.js @@ -51,9 +51,16 @@ config.elasticSearch = { // and update the overlay .env vars with the current working set of fields, until reindexing is done textFields : { record : APP_CONFIG.itemTextFields.split(',').map(f => f.trim()), - collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()) + collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()), + recentCollectionSortBy : APP_CONFIG.recentCollectionsSortByFields.split(',').map(f => { + let parts = f.trim().split(':'); + return { + [parts[0]]: { order: parts[1] || 'desc' } + }; + }) }, + // max number of facets filter options maxFacetCount : 50 } diff --git a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js index b7ab27c8..3d780db0 100644 --- a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js +++ b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js @@ -5,6 +5,8 @@ const CollectionService = require('../services/CollectionService'); const RecordStore = require('../stores/RecordStore'); const AppStateModel = require('./AppStateModel'); +const config = require('../config'); + const {getLogger} = require('@ucd-lib/cork-app-utils'); class CollectionModel extends BaseModel { @@ -110,10 +112,7 @@ class CollectionModel extends BaseModel { // TODO: change to 'uploadDate' let searchDocument = { limit, - sort: [ - {'@graph.yearPublished': {order : "desc" }}, - {'@graph.lastModified': {order : "desc" }} - ] + sort: config.elasticSearch.textFields.recentCollectionSortBy }; // searchDocument = {limit: 3}; return this.search(searchDocument); diff --git a/services/fin/ucd-lib-client/config.js b/services/fin/ucd-lib-client/config.js index 8d06a48e..87a22cc4 100644 --- a/services/fin/ucd-lib-client/config.js +++ b/services/fin/ucd-lib-client/config.js @@ -31,6 +31,10 @@ config.client = { itemTextFields : process.env.ITEM_TEXT_FIELDS || '@graph.text_search_description, name.punctuation_insensitive, name.stem, @graph.identifier, @graph.about, @graph.keywords, @graph.indexableContent', collectionTextFields : process.env.COLLECTION_TEXT_FIELDS || '@graph.name.stem, @graph.description.stem, @graph.about.stem, @graph.keywords.stem', + // similar as textFields above, but for recent collections sorting on the home page and browse page + // field:sortOrder, comma-separated + recentCollectionsSortByFields : process.env.RECENT_COLLECTIONS_SORTBY_FIELDS || '@graph.datePublished:desc', + env : { CLIENT_ENV : env, FIN_APP_VERSION : process.env.FIN_APP_VERSION || '', diff --git a/services/fin/ucd-lib-client/controllers/static.js b/services/fin/ucd-lib-client/controllers/static.js index 071c77d3..2e8a3f3c 100644 --- a/services/fin/ucd-lib-client/controllers/static.js +++ b/services/fin/ucd-lib-client/controllers/static.js @@ -57,6 +57,7 @@ module.exports = async (app) => { featuredImages : config.client.featuredImages, itemTextFields : config.client.itemTextFields, collectionTextFields : config.client.collectionTextFields, + recentCollectionsSortByFields : config.client.recentCollectionsSortByFields, env : config.client.env, disableFileDownloads : config.gateway.proxy.disableFileDownloads, downloadMirrorUrl : config.fcrepo.dataMirror.url, From 9464a59130668ad58786430c3c361370b4bb0b96 Mon Sep 17 00:00:00 2001 From: Dusty Cartwright Date: Mon, 17 Nov 2025 09:04:58 -0800 Subject: [PATCH 3/4] Revert "change recent collections sort to use expanded datePublished field (req. new index) #406" This reverts commit dabffa849cc9f01eeb1cb554de5af4c12fb0ccc2. --- services/fin/models/collection/schema.json | 7 +------ .../client/public/elements/utils/app-browse-by.js | 5 ++++- services/fin/ucd-lib-client/client/public/lib/config.js | 9 +-------- .../client/public/lib/models/CollectionModel.js | 7 ++++--- services/fin/ucd-lib-client/config.js | 4 ---- services/fin/ucd-lib-client/controllers/static.js | 1 - 6 files changed, 10 insertions(+), 23 deletions(-) diff --git a/services/fin/models/collection/schema.json b/services/fin/models/collection/schema.json index bc705735..bfb10b04 100644 --- a/services/fin/models/collection/schema.json +++ b/services/fin/models/collection/schema.json @@ -32,12 +32,7 @@ } } }, - - "@graph.datePublished" : { - "type" : "date", - "format": "yyyy-MM-dd||yyyy-MM||yyyy" - }, - + "@graph.yearPublished" : { "type" : "integer" }, diff --git a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js index 0b7a9d5c..e8aef24d 100644 --- a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js +++ b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js @@ -300,7 +300,10 @@ export default class AppBrowseBy extends Mixin(LitElement) if( sortBy.label === 'A-Z' ) { sort = {"name" : "asc"}; } else if( sortBy.label === 'Recent' ) { - sort = config.elasticSearch.textFields.recentCollectionSortBy; + sort = [ + {'@graph.yearPublished': {order : "desc" }}, + {'@graph.lastModified': {order : "desc" }} + ]; } else { sort = {"@graph.itemCount" : "desc"}; } diff --git a/services/fin/ucd-lib-client/client/public/lib/config.js b/services/fin/ucd-lib-client/client/public/lib/config.js index 0e4ee526..5ca7a90c 100644 --- a/services/fin/ucd-lib-client/client/public/lib/config.js +++ b/services/fin/ucd-lib-client/client/public/lib/config.js @@ -51,16 +51,9 @@ config.elasticSearch = { // and update the overlay .env vars with the current working set of fields, until reindexing is done textFields : { record : APP_CONFIG.itemTextFields.split(',').map(f => f.trim()), - collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()), - recentCollectionSortBy : APP_CONFIG.recentCollectionsSortByFields.split(',').map(f => { - let parts = f.trim().split(':'); - return { - [parts[0]]: { order: parts[1] || 'desc' } - }; - }) + collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()) }, - // max number of facets filter options maxFacetCount : 50 } diff --git a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js index 3d780db0..b7ab27c8 100644 --- a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js +++ b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js @@ -5,8 +5,6 @@ const CollectionService = require('../services/CollectionService'); const RecordStore = require('../stores/RecordStore'); const AppStateModel = require('./AppStateModel'); -const config = require('../config'); - const {getLogger} = require('@ucd-lib/cork-app-utils'); class CollectionModel extends BaseModel { @@ -112,7 +110,10 @@ class CollectionModel extends BaseModel { // TODO: change to 'uploadDate' let searchDocument = { limit, - sort: config.elasticSearch.textFields.recentCollectionSortBy + sort: [ + {'@graph.yearPublished': {order : "desc" }}, + {'@graph.lastModified': {order : "desc" }} + ] }; // searchDocument = {limit: 3}; return this.search(searchDocument); diff --git a/services/fin/ucd-lib-client/config.js b/services/fin/ucd-lib-client/config.js index 87a22cc4..8d06a48e 100644 --- a/services/fin/ucd-lib-client/config.js +++ b/services/fin/ucd-lib-client/config.js @@ -31,10 +31,6 @@ config.client = { itemTextFields : process.env.ITEM_TEXT_FIELDS || '@graph.text_search_description, name.punctuation_insensitive, name.stem, @graph.identifier, @graph.about, @graph.keywords, @graph.indexableContent', collectionTextFields : process.env.COLLECTION_TEXT_FIELDS || '@graph.name.stem, @graph.description.stem, @graph.about.stem, @graph.keywords.stem', - // similar as textFields above, but for recent collections sorting on the home page and browse page - // field:sortOrder, comma-separated - recentCollectionsSortByFields : process.env.RECENT_COLLECTIONS_SORTBY_FIELDS || '@graph.datePublished:desc', - env : { CLIENT_ENV : env, FIN_APP_VERSION : process.env.FIN_APP_VERSION || '', diff --git a/services/fin/ucd-lib-client/controllers/static.js b/services/fin/ucd-lib-client/controllers/static.js index 2e8a3f3c..071c77d3 100644 --- a/services/fin/ucd-lib-client/controllers/static.js +++ b/services/fin/ucd-lib-client/controllers/static.js @@ -57,7 +57,6 @@ module.exports = async (app) => { featuredImages : config.client.featuredImages, itemTextFields : config.client.itemTextFields, collectionTextFields : config.client.collectionTextFields, - recentCollectionsSortByFields : config.client.recentCollectionsSortByFields, env : config.client.env, disableFileDownloads : config.gateway.proxy.disableFileDownloads, downloadMirrorUrl : config.fcrepo.dataMirror.url, From 6c6627de7fb0407a65c8ab35df66cc34d5eb0c83 Mon Sep 17 00:00:00 2001 From: Dusty Cartwright Date: Fri, 14 Nov 2025 15:31:00 -0800 Subject: [PATCH 4/4] change recent collections sort to use expanded datePublished field (req. new index) #406 --- services/fin/models/collection/schema.json | 7 ++++++- .../client/public/elements/utils/app-browse-by.js | 5 +---- services/fin/ucd-lib-client/client/public/lib/config.js | 9 ++++++++- .../client/public/lib/models/CollectionModel.js | 7 +++---- services/fin/ucd-lib-client/config.js | 4 ++++ services/fin/ucd-lib-client/controllers/static.js | 1 + 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/services/fin/models/collection/schema.json b/services/fin/models/collection/schema.json index bfb10b04..bc705735 100644 --- a/services/fin/models/collection/schema.json +++ b/services/fin/models/collection/schema.json @@ -32,7 +32,12 @@ } } }, - + + "@graph.datePublished" : { + "type" : "date", + "format": "yyyy-MM-dd||yyyy-MM||yyyy" + }, + "@graph.yearPublished" : { "type" : "integer" }, diff --git a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js index e8aef24d..0b7a9d5c 100644 --- a/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js +++ b/services/fin/ucd-lib-client/client/public/elements/utils/app-browse-by.js @@ -300,10 +300,7 @@ export default class AppBrowseBy extends Mixin(LitElement) if( sortBy.label === 'A-Z' ) { sort = {"name" : "asc"}; } else if( sortBy.label === 'Recent' ) { - sort = [ - {'@graph.yearPublished': {order : "desc" }}, - {'@graph.lastModified': {order : "desc" }} - ]; + sort = config.elasticSearch.textFields.recentCollectionSortBy; } else { sort = {"@graph.itemCount" : "desc"}; } diff --git a/services/fin/ucd-lib-client/client/public/lib/config.js b/services/fin/ucd-lib-client/client/public/lib/config.js index 5ca7a90c..0e4ee526 100644 --- a/services/fin/ucd-lib-client/client/public/lib/config.js +++ b/services/fin/ucd-lib-client/client/public/lib/config.js @@ -51,9 +51,16 @@ config.elasticSearch = { // and update the overlay .env vars with the current working set of fields, until reindexing is done textFields : { record : APP_CONFIG.itemTextFields.split(',').map(f => f.trim()), - collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()) + collection : APP_CONFIG.collectionTextFields.split(',').map(f => f.trim()), + recentCollectionSortBy : APP_CONFIG.recentCollectionsSortByFields.split(',').map(f => { + let parts = f.trim().split(':'); + return { + [parts[0]]: { order: parts[1] || 'desc' } + }; + }) }, + // max number of facets filter options maxFacetCount : 50 } diff --git a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js index b7ab27c8..3d780db0 100644 --- a/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js +++ b/services/fin/ucd-lib-client/client/public/lib/models/CollectionModel.js @@ -5,6 +5,8 @@ const CollectionService = require('../services/CollectionService'); const RecordStore = require('../stores/RecordStore'); const AppStateModel = require('./AppStateModel'); +const config = require('../config'); + const {getLogger} = require('@ucd-lib/cork-app-utils'); class CollectionModel extends BaseModel { @@ -110,10 +112,7 @@ class CollectionModel extends BaseModel { // TODO: change to 'uploadDate' let searchDocument = { limit, - sort: [ - {'@graph.yearPublished': {order : "desc" }}, - {'@graph.lastModified': {order : "desc" }} - ] + sort: config.elasticSearch.textFields.recentCollectionSortBy }; // searchDocument = {limit: 3}; return this.search(searchDocument); diff --git a/services/fin/ucd-lib-client/config.js b/services/fin/ucd-lib-client/config.js index 8d06a48e..87a22cc4 100644 --- a/services/fin/ucd-lib-client/config.js +++ b/services/fin/ucd-lib-client/config.js @@ -31,6 +31,10 @@ config.client = { itemTextFields : process.env.ITEM_TEXT_FIELDS || '@graph.text_search_description, name.punctuation_insensitive, name.stem, @graph.identifier, @graph.about, @graph.keywords, @graph.indexableContent', collectionTextFields : process.env.COLLECTION_TEXT_FIELDS || '@graph.name.stem, @graph.description.stem, @graph.about.stem, @graph.keywords.stem', + // similar as textFields above, but for recent collections sorting on the home page and browse page + // field:sortOrder, comma-separated + recentCollectionsSortByFields : process.env.RECENT_COLLECTIONS_SORTBY_FIELDS || '@graph.datePublished:desc', + env : { CLIENT_ENV : env, FIN_APP_VERSION : process.env.FIN_APP_VERSION || '', diff --git a/services/fin/ucd-lib-client/controllers/static.js b/services/fin/ucd-lib-client/controllers/static.js index 071c77d3..2e8a3f3c 100644 --- a/services/fin/ucd-lib-client/controllers/static.js +++ b/services/fin/ucd-lib-client/controllers/static.js @@ -57,6 +57,7 @@ module.exports = async (app) => { featuredImages : config.client.featuredImages, itemTextFields : config.client.itemTextFields, collectionTextFields : config.client.collectionTextFields, + recentCollectionsSortByFields : config.client.recentCollectionsSortByFields, env : config.client.env, disableFileDownloads : config.gateway.proxy.disableFileDownloads, downloadMirrorUrl : config.fcrepo.dataMirror.url,