Skip to content

Commit e392833

Browse files
committed
fix: converted hardcoded relevance sort order to configuration individual
Apply first sort option none was specificly defined and if query text wasn't provided, which means that only facets were used
1 parent 6c5d21c commit e392833

File tree

6 files changed

+40
-19
lines changed

6 files changed

+40
-19
lines changed

api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,10 +462,26 @@ private void addDefaultVitroFacets(VitroRequest vreq, SearchQuery query) {
462462

463463
private void addSortRules(VitroRequest vreq, SearchQuery query, Map<String, SortConfiguration> sortOptions) {
464464
String sortType = getSortType(vreq);
465+
if (sortOptions.isEmpty()) {
466+
return;
467+
}
465468
if (!StringUtils.isBlank(sortType) && sortOptions.containsKey(sortType)) {
466469
SortConfiguration conf = sortOptions.get(sortType);
467470
query.addSortField(conf.getField(vreq.getLocale()), conf.getSortOrder());
468471
conf.setSelected(true);
472+
return;
473+
}
474+
boolean textQueryIsEmpty = StringUtils.isBlank(getQueryText(vreq));
475+
// If text field is empty, apply the first sort option
476+
if (textQueryIsEmpty) {
477+
SortConfiguration conf = sortOptions.entrySet().iterator().next().getValue();
478+
query.addSortField(conf.getField(vreq.getLocale()), conf.getSortOrder());
479+
// If text field is not empty, sort by relevance
480+
} else {
481+
SortConfiguration conf = sortOptions.get("relevance");
482+
if (conf != null) {
483+
query.addSortField(conf.getField(vreq.getLocale()), conf.getSortOrder());
484+
}
469485
}
470486
}
471487

api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/SearchFiltering.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,16 @@ public class SearchFiltering {
125125
+ "WHERE {\n"
126126
+ " ?sort rdf:type search:Sort . \n"
127127
+ " ?sort rdfs:label ?sort_label .\n"
128-
+ " ?sort search:sortField ?field .\n"
129-
+ " ?sort search:id ?id .\n"
130-
+ " ?field search:indexField ?searchField .\n"
131128
+ " OPTIONAL {\n"
132-
+ " ?field search:isLanguageSpecific ?f_multilingual .\n"
133-
+ " BIND(?f_multilingual as ?bind_multilingual) .\n"
129+
+ " ?sort search:sortField ?field .\n"
130+
+ " ?field search:indexField ?searchField .\n"
131+
+ " OPTIONAL {\n"
132+
+ " ?field search:isLanguageSpecific ?f_multilingual .\n"
133+
+ " BIND(?f_multilingual as ?bind_multilingual) .\n"
134+
+ " }\n"
135+
+ " }\n"
136+
+ " OPTIONAL {\n"
137+
+ " ?sort search:id ?id .\n"
134138
+ " }\n"
135139
+ " OPTIONAL {\n"
136140
+ " ?sort search:isAscending ?f_ord .\n"
@@ -340,12 +344,13 @@ public static Map<String, SortConfiguration> getSortConfigurations(VitroRequest
340344
ResultSet results = qexec.execSelect();
341345
while (results.hasNext()) {
342346
QuerySolution solution = results.nextSolution();
343-
if (solution.get("label") == null || solution.get("id") == null
344-
|| solution.get("searchField") == null) {
347+
RDFNode searchFieldNode = solution.get("searchField");
348+
RDFNode idNode = solution.get("id");
349+
if (solution.get("label") == null) {
345350
continue;
346351
}
347-
String field = solution.get("searchField").toString();
348-
String id = solution.get("id").toString();
352+
String field = searchFieldNode == null ? "" : searchFieldNode.toString();
353+
String id = idNode == null ? "" : idNode.toString();
349354
String label = solution.get("label").toString();
350355

351356
SortConfiguration config = null;

home/src/main/resources/rdf/display/firsttime/search_individuals_vitro.n3

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
vitro-search:order 30 ;
4545
vitro-search:id "titleasc" .
4646

47+
:sort_by_relevance a vitro-search:Sort ;
48+
vitro-search:id "relevance" .
49+
4750
:field_label_sort
4851
a vitro-search:SearchField ;
4952
vitro-search:isLanguageSpecific true ;

home/src/main/resources/rdf/i18n/en_US/display/firsttime/search_individuals_vitro.n3

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
:filter_category rdfs:label "Category"@en-US .
77
:sort_title_desc rdfs:label "Title Z-A"@en-US .
88
:sort_title_asc rdfs:label "Title A-Z"@en-US .
9+
:sort_by_relevance rdfs:label "Relevance"@en-US .
910
:field_label_sort rdfs:label "Label sort field"@en-US .
1011
:field_category rdfs:label "ClassGroup"@en-US .
1112
:field_type rdfs:label "Type"@en-US .

home/src/main/resources/rdf/i18n/en_US/interface-i18n/firsttime/vitro_extended_search.ttl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@
66
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
77
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
88

9-
uil-data:search_results_relevance.Vitro
10-
rdf:type owl:NamedIndividual ;
11-
rdf:type uil:PropertyKey ;
12-
rdfs:label "Relevance"@en-US ;
13-
uil:hasApp "Vitro" ;
14-
uil:hasKey "search_results_relevance" ;
15-
uil:hasPackage "Vitro-languages" .
16-
179
uil-data:search_results_sort_by.Vitro
1810
rdf:type owl:NamedIndividual ;
1911
rdf:type uil:PropertyKey ;

webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,15 +265,19 @@ ${headScripts.add('<script type="text/javascript" src="${urls.base}/bootstrap-5.
265265
<#macro printSorting>
266266
<#if sorting?has_content>
267267
<div>
268-
<select form="search-form" name="sort" id="search-form-sort" onchange="this.form.submit()" >
269-
<option value="">${i18n().search_results_sort_by} ${i18n().search_results_relevance}</option>
268+
<select form="extended-search-form" name="sort" id="search-form-sort" onchange="$('#extended-search-form').submit()" >
269+
<#assign addDefaultOption = true>
270270
<#list sorting as option>
271271
<#if option.selected>
272272
<option value="${option.id}" selected="selected">${i18n().search_results_sort_by} ${option.label}</option>
273+
<#assign addDefaultOption = false>
273274
<#else>
274275
<option value="${option.id}" >${i18n().search_results_sort_by} ${option.label}</option>
275276
</#if>
276277
</#list>
278+
<#if addDefaultOption>
279+
<option disabled selected value="" style="display:none">${i18n().search_results_sort_by}</option>
280+
</#if>
277281
</select>
278282
</div>
279283
</#if>

0 commit comments

Comments
 (0)