From b87b1f69ae43145380b72345d987c03e1d2896a9 Mon Sep 17 00:00:00 2001 From: ZMai <zmai@slb.com> Date: Thu, 23 Nov 2023 07:48:33 -0600 Subject: [PATCH] Avoid using query with cursor if possible --- .../AugmenterConfigurationServiceImpl.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/AugmenterConfigurationServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/AugmenterConfigurationServiceImpl.java index e3cc866dd..bae0fc589 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/AugmenterConfigurationServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/AugmenterConfigurationServiceImpl.java @@ -57,6 +57,7 @@ public class AugmenterConfigurationServiceImpl implements AugmenterConfiguration "nested(data.Configurations, nested(data.Configurations.Paths, (RelatedObjectsSpec.RelationshipDirection: ChildToParent AND RelatedObjectsSpec.RelatedObjectKind:\"%s\")))"; private static final String HAS_CONFIGURATIONS_QUERY_FORMAT = "data.Code: \"%s\" OR nested(data.Configurations, nested(data.Configurations.Paths, (RelatedObjectsSpec.RelatedObjectKind:\"%s\")))"; private static final int MAX_SEARCH_LIMIT = 1000; + private static final int MAX_TOTAL_COUNT = 10000; private static final String PROPERTY_DELIMITER = "."; private static final String NESTED_OBJECT_DELIMITER = "[]."; @@ -890,7 +891,7 @@ public class AugmenterConfigurationServiceImpl implements AugmenterConfiguration searchRequest.setQuery(query); searchRequest.setReturnedFields(Arrays.asList("kind", "id", "data." + ASSOCIATED_IDENTITIES_PROPERTY)); List<RecordInfo> recordInfos = new ArrayList<>(); - for (SearchRecord searchRecord : searchRecordsWithCursor(searchRequest)) { + for (SearchRecord searchRecord : searchRecords(searchRequest)) { Map<String, Object> data = searchRecord.getData(); if (!data.containsKey(ASSOCIATED_IDENTITIES_PROPERTY) || data.get(ASSOCIATED_IDENTITIES_PROPERTY) == null) continue; @@ -1056,7 +1057,7 @@ public class AugmenterConfigurationServiceImpl implements AugmenterConfiguration searchRequest.setKind(kind); String query = String.format("%s: \"%s\"", childrenObjectField, parentId); searchRequest.setQuery(query); - return searchRecordsWithCursor(searchRequest); + return searchRecords(searchRequest); } private List<SearchRecord> searchRecordsWithCursor(SearchRequest searchRequest) { @@ -1064,23 +1065,24 @@ public class AugmenterConfigurationServiceImpl implements AugmenterConfiguration List<SearchRecord> allRecords = new ArrayList<>(); try { List<SearchRecord> results = null; + String cursor = null; do { SearchResponse searchResponse = searchService.queryWithCursor(searchRequest); results = searchResponse.getResults(); + cursor = searchResponse.getCursor(); if (!CollectionUtils.isEmpty(results)) { allRecords.addAll(results); - if (!Strings.isNullOrEmpty(searchResponse.getCursor()) && results.size() == MAX_SEARCH_LIMIT) { - searchRequest.setCursor(searchResponse.getCursor()); + if (!Strings.isNullOrEmpty(cursor)) { + searchRequest.setCursor(cursor); } } - } while(results != null && results.size() == MAX_SEARCH_LIMIT); + } while(results != null && cursor != null); } catch (URISyntaxException e) { jaxRsDpsLog.error(SEARCH_GENERAL_ERROR, e); } return allRecords; } - // The search without cursor can return max. 10,000 records private List<SearchRecord> searchRecords(SearchRequest searchRequest) { searchRequest.setLimit(MAX_SEARCH_LIMIT); int offset = 0; @@ -1089,6 +1091,11 @@ public class AugmenterConfigurationServiceImpl implements AugmenterConfiguration List<SearchRecord> results = null; do { SearchResponse searchResponse = searchService.query(searchRequest); + if(searchResponse.totalCount >= MAX_TOTAL_COUNT) { + // The search without cursor can return max. 10,000 records + // If the totalCount reaches 10,1000 records, we should switch to using query with cursor + return searchRecordsWithCursor(searchRequest); + } results = searchResponse.getResults(); if (!CollectionUtils.isEmpty(results)) { allRecords.addAll(results); -- GitLab