diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java index 7e19aa7..19f89f7 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java @@ -73,9 +73,13 @@ public class CountMultiSearcher implements MultiSearcher { return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { for (LuceneSearchResult luceneSearchResult : resultsToDrop) { - luceneSearchResult.close(); + if (luceneSearchResult.isAccessible()) { + luceneSearchResult.close(); + } + } + if (indexSearchers.isAccessible()) { + indexSearchers.close(); } - indexSearchers.close(); }); }); }, false)); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java index 3c50415..0d54904 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java @@ -54,8 +54,16 @@ public class PagedLocalSearcher implements LocalSearcher { .transform(firstPageTopDocsMono -> this.computeFirstPageResults(firstPageTopDocsMono, indexSearchers.shards(), keyFieldName, queryParams2)) // Compute other results - .transform(firstResult -> this.computeOtherResults(firstResult, indexSearchers.shards(), queryParams2, - keyFieldName, indexSearchers::close)) + .transform(firstResult -> this.computeOtherResults(firstResult, + indexSearchers.shards(), + queryParams2, + keyFieldName, + () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + } + )) // Ensure that one LuceneSearchResult is always returned .single() ); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java index b2a794a..1688d55 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java @@ -62,8 +62,16 @@ public class ScoredPagedMultiSearcher implements MultiSearcher { .transform(firstPageTopDocsMono -> this.computeFirstPageResults(firstPageTopDocsMono, indexSearchers, keyFieldName, queryParams2)) // Compute other results - .map(firstResult -> this.computeOtherResults(firstResult, indexSearchers.shards(), - queryParams2, keyFieldName, indexSearchers::close)) + .map(firstResult -> this.computeOtherResults(firstResult, + indexSearchers.shards(), + queryParams2, + keyFieldName, + () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + } + )) // Ensure that one LuceneSearchResult is always returned .single(), false); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java index 62c9f16..a8e95ec 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java @@ -127,7 +127,9 @@ public class SortedByScoreFullMultiSearcher implements MultiSearcher { .take(queryParams.limitLong(), true); return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { - indexSearchers.close(); + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } try { data.close(); } catch (Exception e) { diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java index 7a28c6d..6cbc49d 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java @@ -121,7 +121,9 @@ public class SortedScoredFullMultiSearcher implements MultiSearcher { .take(queryParams.limitLong(), true); return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { - indexSearchers.close(); + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } data.close(); }); }); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java index 55fc9ce..9f8ab08 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java @@ -143,7 +143,11 @@ public class StandardSearcher implements MultiSearcher { .skip(queryParams.offsetLong()) .take(queryParams.limitLong(), true); - return new LuceneSearchResult(totalHitsCount, hitsFlux, indexSearchers::close); + return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + }); }); } diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java index ab32fb4..e54a86b 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java @@ -53,7 +53,11 @@ public class UnsortedStreamingMultiSearcher implements MultiSearcher { .skip(queryParams2.offsetLong()) .take(queryParams2.limitLong(), true); - return new LuceneSearchResult(totalHitsCount, mergedFluxes, indexSearchers::close); + return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + }); }); }, false); } diff --git a/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java b/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java index 3efa77c..9216628 100644 --- a/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java +++ b/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java @@ -74,9 +74,13 @@ public class UnsortedUnscoredSimpleMultiSearcher implements MultiSearcher { return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { for (LuceneSearchResult luceneSearchResult : resultsToDrop) { - luceneSearchResult.close(); + if (luceneSearchResult.isAccessible()) { + luceneSearchResult.close(); + } + } + if (indexSearchers.isAccessible()) { + indexSearchers.close(); } - indexSearchers.close(); }); }) .doFirst(() -> {