diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java index 23fa932a4c8495da0c3e2d90a371282238f6c6a9..64c86bed66b96695f744c86d8976105bcb162f30 100644 --- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java +++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java @@ -729,25 +729,28 @@ public class FessEsClient implements Client { if (condition.build(searchRequestBuilder)) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); + String scrollId = null; try { if (logger.isDebugEnabled()) { logger.debug("Query DSL:\n" + searchRequestBuilder.toString()); } SearchResponse response = searchRequestBuilder.execute().actionGet(ComponentUtil.getFessConfig().getIndexSearchTimeout()); - String scrollId = response.getScrollId(); + scrollId = response.getScrollId(); while (scrollId != null) { final SearchHits searchHits = response.getHits(); final SearchHit[] hits = searchHits.getHits(); if (hits.length == 0) { - scrollId = null; break; } for (final SearchHit hit : hits) { count++; if (!cursor.apply(creator.build(response, hit))) { - scrollId = null; + if (scrollId != null) { + client.prepareClearScroll().addScrollId(scrollId) + .execute(ActionListener.wrap(res -> {}, e1 -> logger.warn("Failed to clear scrollId.", e1))); + } break; } } @@ -758,6 +761,10 @@ public class FessEsClient implements Client { scrollId = response.getScrollId(); } } catch (final SearchPhaseExecutionException e) { + if (scrollId != null) { + client.prepareClearScroll().addScrollId(scrollId) + .execute(ActionListener.wrap(res -> {}, e1 -> logger.warn("Failed to clear scrollId.", e1))); + } throw new InvalidQueryException(messages -> messages.addErrorsInvalidQueryParseError(UserMessages.GLOBAL_PROPERTY_KEY), "Invalid query: " + searchRequestBuilder, e); } diff --git a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java index de42b207e44cd4f838d5ac306580bfcc844511c5..6fd8e8bd10a7b90c5005f6c934037c800b9ecd89 100644 --- a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java +++ b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java @@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean; import org.dbflute.exception.FetchingOverSafetySizeException; import org.dbflute.exception.IllegalBehaviorStateException; import org.dbflute.util.DfTypeUtil; +import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.DocWriteResponse.Result; import org.elasticsearch.action.admin.indices.refresh.RefreshResponse; import org.elasticsearch.action.bulk.BulkItemResponse; @@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi } if (!handler.apply(searchHits)) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi count += hits.length; final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout); if (bulkResponse.hasFailures()) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage()); } } diff --git a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java index 3eb9302eeebe31fb54f6d910b1f83d655e83823c..f63ec1aa1a71fd5f7de62eb43bd5b9494ccbbdcf 100644 --- a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java +++ b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java @@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean; import org.dbflute.exception.FetchingOverSafetySizeException; import org.dbflute.exception.IllegalBehaviorStateException; import org.dbflute.util.DfTypeUtil; +import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.DocWriteResponse.Result; import org.elasticsearch.action.admin.indices.refresh.RefreshResponse; import org.elasticsearch.action.bulk.BulkItemResponse; @@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi } if (!handler.apply(searchHits)) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi count += hits.length; final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout); if (bulkResponse.hasFailures()) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage()); } } diff --git a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java index ff0667ba0eabd53ebd8d10d75c26dff8a9de772d..3dbf64e139a3d6b59e4aa1d99cb6f1f2230435db 100644 --- a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java +++ b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java @@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean; import org.dbflute.exception.FetchingOverSafetySizeException; import org.dbflute.exception.IllegalBehaviorStateException; import org.dbflute.util.DfTypeUtil; +import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.DocWriteResponse.Result; import org.elasticsearch.action.admin.indices.refresh.RefreshResponse; import org.elasticsearch.action.bulk.BulkItemResponse; @@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi } if (!handler.apply(searchHits)) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi count += hits.length; final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout); if (bulkResponse.hasFailures()) { + if (response.getScrollId() != null) { + client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {})); + } throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage()); } }