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 23fa932a4..64c86bed6 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 de42b207e..6fd8e8bd1 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 {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior {})); + } 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 3eb9302ee..f63ec1aa1 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 {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior {})); + } 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 ff0667ba0..3dbf64e13 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 {})); + } break; } } @@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior {})); + } throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage()); } }