Skip to content

Commit 309e25e

Browse files
authored
Merge pull request DSpace#10591 from alanorth/port-dspace7-10537
[Port dspace-7_x] Optimize count-only Solr queries
2 parents bc7a681 + 9eef166 commit 309e25e

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

dspace-api/src/main/java/org/dspace/authorize/AuthorizeServiceImpl.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import static org.dspace.app.util.AuthorizeUtil.canCollectionAdminManageAccounts;
1111
import static org.dspace.app.util.AuthorizeUtil.canCommunityAdminManageAccounts;
12+
import static org.dspace.discovery.SearchUtils.RESOURCE_TYPE_FIELD;
1213

1314
import java.sql.SQLException;
1415
import java.util.ArrayList;
@@ -736,7 +737,7 @@ public List<ResourcePolicy> getPoliciesActionFilterExceptRpType(Context c, DSpac
736737
*/
737738
@Override
738739
public boolean isCommunityAdmin(Context context) throws SQLException {
739-
return performCheck(context, "search.resourcetype:" + IndexableCommunity.TYPE);
740+
return performCheck(context, RESOURCE_TYPE_FIELD + ":" + IndexableCommunity.TYPE);
740741
}
741742

742743
/**
@@ -749,7 +750,7 @@ public boolean isCommunityAdmin(Context context) throws SQLException {
749750
*/
750751
@Override
751752
public boolean isCollectionAdmin(Context context) throws SQLException {
752-
return performCheck(context, "search.resourcetype:" + IndexableCollection.TYPE);
753+
return performCheck(context, RESOURCE_TYPE_FIELD + ":" + IndexableCollection.TYPE);
753754
}
754755

755756
/**
@@ -762,7 +763,7 @@ public boolean isCollectionAdmin(Context context) throws SQLException {
762763
*/
763764
@Override
764765
public boolean isItemAdmin(Context context) throws SQLException {
765-
return performCheck(context, "search.resourcetype:" + IndexableItem.TYPE);
766+
return performCheck(context, RESOURCE_TYPE_FIELD + ":" + IndexableItem.TYPE);
766767
}
767768

768769
/**
@@ -776,8 +777,8 @@ public boolean isItemAdmin(Context context) throws SQLException {
776777
@Override
777778
public boolean isComColAdmin(Context context) throws SQLException {
778779
return performCheck(context,
779-
"(search.resourcetype:" + IndexableCommunity.TYPE + " OR search.resourcetype:" +
780-
IndexableCollection.TYPE + ")");
780+
"(" + RESOURCE_TYPE_FIELD + ":" + IndexableCommunity.TYPE + " OR " +
781+
RESOURCE_TYPE_FIELD + ":" + IndexableCollection.TYPE + ")");
781782
}
782783

783784
/**
@@ -795,7 +796,7 @@ public List<Community> findAdminAuthorizedCommunity(Context context, String quer
795796
throws SearchServiceException, SQLException {
796797
List<Community> communities = new ArrayList<>();
797798
query = formatCustomQuery(query);
798-
DiscoverResult discoverResult = getDiscoverResult(context, query + "search.resourcetype:" +
799+
DiscoverResult discoverResult = getDiscoverResult(context, query + RESOURCE_TYPE_FIELD + ":" +
799800
IndexableCommunity.TYPE,
800801
offset, limit, null, null);
801802
for (IndexableObject solrCollections : discoverResult.getIndexableObjects()) {
@@ -817,9 +818,9 @@ public List<Community> findAdminAuthorizedCommunity(Context context, String quer
817818
public long countAdminAuthorizedCommunity(Context context, String query)
818819
throws SearchServiceException, SQLException {
819820
query = formatCustomQuery(query);
820-
DiscoverResult discoverResult = getDiscoverResult(context, query + "search.resourcetype:" +
821+
DiscoverResult discoverResult = getDiscoverResult(context, query + RESOURCE_TYPE_FIELD + ":" +
821822
IndexableCommunity.TYPE,
822-
null, null, null, null);
823+
null, 0, null, null);
823824
return discoverResult.getTotalSearchResults();
824825
}
825826

@@ -842,7 +843,7 @@ public List<Collection> findAdminAuthorizedCollection(Context context, String qu
842843
}
843844

844845
query = formatCustomQuery(query);
845-
DiscoverResult discoverResult = getDiscoverResult(context, query + "search.resourcetype:" +
846+
DiscoverResult discoverResult = getDiscoverResult(context, query + RESOURCE_TYPE_FIELD + ":" +
846847
IndexableCollection.TYPE,
847848
offset, limit, CollectionService.SOLR_SORT_FIELD, SORT_ORDER.asc);
848849
for (IndexableObject solrCollections : discoverResult.getIndexableObjects()) {
@@ -864,9 +865,9 @@ public List<Collection> findAdminAuthorizedCollection(Context context, String qu
864865
public long countAdminAuthorizedCollection(Context context, String query)
865866
throws SearchServiceException, SQLException {
866867
query = formatCustomQuery(query);
867-
DiscoverResult discoverResult = getDiscoverResult(context, query + "search.resourcetype:" +
868+
DiscoverResult discoverResult = getDiscoverResult(context, query + RESOURCE_TYPE_FIELD + ":" +
868869
IndexableCollection.TYPE,
869-
null, null, null, null);
870+
null, 0, null, null);
870871
return discoverResult.getTotalSearchResults();
871872
}
872873

dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -861,16 +861,20 @@ protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQ
861861

862862
solrQuery.setQuery(query);
863863

864-
// Add any search fields to our query. This is the limited list
865-
// of fields that will be returned in the solr result
866-
for (String fieldName : discoveryQuery.getSearchFields()) {
867-
solrQuery.addField(fieldName);
868-
}
869-
// Also ensure a few key obj identifier fields are returned with every query
870-
solrQuery.addField(SearchUtils.RESOURCE_TYPE_FIELD);
871-
solrQuery.addField(SearchUtils.RESOURCE_ID_FIELD);
872-
solrQuery.addField(SearchUtils.RESOURCE_UNIQUE_ID);
873-
solrQuery.addField(STATUS_FIELD);
864+
if (discoveryQuery.getMaxResults() != 0) {
865+
// set search fields in Solr query only if we are interested in the actual search results
866+
867+
// Add any search fields to our query. This is the limited list
868+
// of fields that will be returned in the solr result
869+
for (String fieldName : discoveryQuery.getSearchFields()) {
870+
solrQuery.addField(fieldName);
871+
}
872+
// Also ensure a few key obj identifier fields are returned with every query
873+
solrQuery.addField(SearchUtils.RESOURCE_TYPE_FIELD);
874+
solrQuery.addField(SearchUtils.RESOURCE_ID_FIELD);
875+
solrQuery.addField(SearchUtils.RESOURCE_UNIQUE_ID);
876+
solrQuery.addField(STATUS_FIELD);
877+
}
874878

875879
if (discoveryQuery.isSpellCheck()) {
876880
solrQuery.setParam(SpellingParams.SPELLCHECK_Q, query);

0 commit comments

Comments
 (0)