code review fix
This commit is contained in:
parent
b242620bb8
commit
1d2bde268e
|
@ -198,6 +198,26 @@ public class SearchBuilder implements ISearchBuilder<JpaPid> {
|
||||||
private String mySearchUuid;
|
private String mySearchUuid;
|
||||||
private int myFetchSize;
|
private int myFetchSize;
|
||||||
private Integer myMaxResultsToFetch;
|
private Integer myMaxResultsToFetch;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of PIDs of results that have already been returned in a search.
|
||||||
|
*
|
||||||
|
* Searches use pre-fetch thresholds to avoid returning every result in the db
|
||||||
|
* (see {@link JpaStorageSettings mySearchPreFetchThresholds}). These threshold values
|
||||||
|
* dictate the usage of this set.
|
||||||
|
*
|
||||||
|
* Results from searches returning *less* than a prefetch threshold are put into this set
|
||||||
|
* for 2 purposes:
|
||||||
|
* 1) skipping already seen resources. ie, client requesting next "page" of
|
||||||
|
* results should skip previously returned results
|
||||||
|
* 2) deduplication of returned results. ie, searches can return duplicate resources (due to
|
||||||
|
* sort and filter criteria), so this set will be used to avoid returning duplicate results.
|
||||||
|
*
|
||||||
|
* NOTE: if a client requests *more* resources than *all* prefetch thresholds,
|
||||||
|
* we push the work of "deduplication" to the database. No newly seen resource
|
||||||
|
* will be stored in this set (to avoid this set exploding in size and the JVM running out memory).
|
||||||
|
* We will, however, still use it to skip previously seen results.
|
||||||
|
*/
|
||||||
private Set<JpaPid> myPidSet;
|
private Set<JpaPid> myPidSet;
|
||||||
private boolean myHasNextIteratorQuery = false;
|
private boolean myHasNextIteratorQuery = false;
|
||||||
private RequestPartitionId myRequestPartitionId;
|
private RequestPartitionId myRequestPartitionId;
|
||||||
|
@ -2408,10 +2428,12 @@ public class SearchBuilder implements ISearchBuilder<JpaPid> {
|
||||||
JpaPid next = JpaPid.fromId(nextLong);
|
JpaPid next = JpaPid.fromId(nextLong);
|
||||||
if (doNotSkipNextPidForEverything() && !myPidSet.contains(next)) {
|
if (doNotSkipNextPidForEverything() && !myPidSet.contains(next)) {
|
||||||
if (myMaxResultsToFetch != null) {
|
if (myMaxResultsToFetch != null) {
|
||||||
// we only add to the map if we aren't fetching "everything";
|
/*
|
||||||
// otherwise, we let the de-duplication happen in the database
|
* We only add to the map if we aren't fetching "everything";
|
||||||
// (see createChunkedQueryNormalSearch above), becuase it saves
|
* otherwise, we let the de-duplication happen in the database
|
||||||
// memory that way
|
* (see createChunkedQueryNormalSearch above), because it
|
||||||
|
* saves memory that way.
|
||||||
|
*/
|
||||||
myPidSet.add(next);
|
myPidSet.add(next);
|
||||||
}
|
}
|
||||||
myNext = next;
|
myNext = next;
|
||||||
|
|
Loading…
Reference in New Issue