diff --git a/plugin.xml b/plugin.xml index 04c583c46..d9c0245e4 100644 --- a/plugin.xml +++ b/plugin.xml @@ -39,15 +39,6 @@ - - - - - - - - - diff --git a/src/main/java/org/codelibs/fess/api/json/JsonApiManager.java b/src/main/java/org/codelibs/fess/api/json/JsonApiManager.java index 49c313507..e7add6573 100644 --- a/src/main/java/org/codelibs/fess/api/json/JsonApiManager.java +++ b/src/main/java/org/codelibs/fess/api/json/JsonApiManager.java @@ -187,7 +187,7 @@ public class JsonApiManager extends BaseJsonApiManager { } protected void processPingRequest(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); int status; Exception err = null; try { diff --git a/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java b/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java index ff3c7b1ce..48c5a5a6d 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java @@ -67,6 +67,7 @@ import org.codelibs.fess.util.ComponentUtil; import org.codelibs.fess.util.GsaConfigParser; import org.codelibs.fess.util.RenderDataUtil; import org.codelibs.fess.util.ResourceUtil; +import org.codelibs.fess.util.SearchEngineUtil; import org.lastaflute.core.magic.async.AsyncManager; import org.lastaflute.web.Execute; import org.lastaflute.web.response.ActionResponse; @@ -332,9 +333,19 @@ public class AdminBackupAction extends FessAdminAction { filename = id + ".bulk"; } return asStream(filename).contentTypeOctetStream().stream(out -> { - try (CurlResponse response = ComponentUtil.getCurlHelper().get("/" + index + "/_data").param("format", "json") - .param("scroll", fessConfig.getIndexScrollSearchTimeout()).execute()) { - out.write(response.getContentAsStream()); + try (final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out.stream(), Constants.CHARSET_UTF_8))) { + SearchEngineUtil.scroll(index, hit -> { + try { + writer.write("{\"index\":{\"_index\":\"" + index + "\",\"_id\":\"" + + StringEscapeUtils.escapeJson(hit.getId()) + "\"}}\n"); + writer.write(hit.getSourceAsString()); + writer.write("\n"); + } catch (IOException e) { + throw new IORuntimeException(e); + } + return true; + }); + writer.flush(); } }); } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java b/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java index 0a334a0cc..9147cdc6d 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java @@ -15,7 +15,9 @@ */ package org.codelibs.fess.app.web.admin.maintenance; +import java.io.BufferedWriter; import java.io.IOException; +import java.io.OutputStreamWriter; import java.net.InetAddress; import java.nio.file.Files; import java.nio.file.Path; @@ -30,8 +32,10 @@ import java.util.zip.ZipOutputStream; import javax.annotation.Resource; +import org.apache.commons.text.StringEscapeUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.codelibs.core.exception.IORuntimeException; import org.codelibs.core.io.CopyUtil; import org.codelibs.core.lang.StringUtil; import org.codelibs.curl.CurlResponse; @@ -42,6 +46,7 @@ import org.codelibs.fess.app.web.base.FessAdminAction; import org.codelibs.fess.es.client.SearchEngineClient; import org.codelibs.fess.mylasta.direction.FessConfig.SimpleImpl; import org.codelibs.fess.util.ComponentUtil; +import org.codelibs.fess.util.SearchEngineUtil; import org.lastaflute.web.Execute; import org.lastaflute.web.response.ActionResponse; import org.lastaflute.web.response.HtmlResponse; @@ -218,9 +223,20 @@ public class AdminMaintenanceAction extends FessAdminAction { final ZipEntry entry = new ZipEntry(id + "/fess_basic_config.bulk"); try { zos.putNextEntry(entry); - try (CurlResponse response = ComponentUtil.getCurlHelper().get("/.fess_basic_config/_data").param("format", "json") - .param("scroll", fessConfig.getIndexScrollSearchTimeout()).execute()) { - CopyUtil.copy(response.getContentAsStream(), zos); + final String index = ".fess_basic_config"; + try (final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(zos, Constants.CHARSET_UTF_8))) { + SearchEngineUtil.scroll(index, hit -> { + try { + writer.write("{\"index\":{\"_index\":\"" + index + "\",\"_id\":\"" + StringEscapeUtils.escapeJson(hit.getId()) + + "\"}}\n"); + writer.write(hit.getSourceAsString()); + writer.write("\n"); + } catch (IOException e) { + throw new IORuntimeException(e); + } + return true; + }); + writer.flush(); } } catch (final IOException e) { logger.warn("Failed to access system.properties.", e); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java index 64cd71575..40be50a87 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java @@ -385,7 +385,7 @@ public class AdminSearchlistAction extends FessAdminAction { public static OptionalEntity> getDoc(final CreateForm form) { final SystemHelper systemHelper = ComponentUtil.getSystemHelper(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); switch (form.crudMode) { case CrudMode.CREATE: final Map entity = new HashMap<>(); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/backup/ApiAdminBackupAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/backup/ApiAdminBackupAction.java index aefe5d788..faf6cb8bd 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/backup/ApiAdminBackupAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/backup/ApiAdminBackupAction.java @@ -26,6 +26,7 @@ import static org.codelibs.fess.app.web.admin.backup.AdminBackupAction.getUserIn import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; @@ -33,13 +34,15 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; -import org.codelibs.curl.CurlResponse; +import org.apache.commons.text.StringEscapeUtils; +import org.codelibs.core.exception.IORuntimeException; import org.codelibs.fess.Constants; import org.codelibs.fess.app.web.api.ApiResult; import org.codelibs.fess.app.web.api.ApiResult.ApiBackupFilesResponse; import org.codelibs.fess.app.web.api.admin.FessApiAdminAction; import org.codelibs.fess.mylasta.direction.FessConfig; import org.codelibs.fess.util.ComponentUtil; +import org.codelibs.fess.util.SearchEngineUtil; import org.lastaflute.web.Execute; import org.lastaflute.web.response.JsonResponse; import org.lastaflute.web.response.StreamResponse; @@ -92,9 +95,19 @@ public class ApiAdminBackupAction extends FessApiAdminAction { filename = id + ".bulk"; } return asStream(filename).contentTypeOctetStream().stream(out -> { - try (CurlResponse response = - ComponentUtil.getCurlHelper().get("/" + index + "/_data").param("format", "json").execute()) { - out.write(response.getContentAsStream()); + try (final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out.stream(), Constants.CHARSET_UTF_8))) { + SearchEngineUtil.scroll(index, hit -> { + try { + writer.write("{\"index\":{\"_index\":\"" + index + "\",\"_id\":\"" + + StringEscapeUtils.escapeJson(hit.getId()) + "\"}}\n"); + writer.write(hit.getSourceAsString()); + writer.write("\n"); + } catch (IOException e) { + throw new IORuntimeException(e); + } + return true; + }); + writer.flush(); } }); } diff --git a/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java b/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java index ecb8da0ad..c05d2cffe 100644 --- a/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java +++ b/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java @@ -64,7 +64,7 @@ public class FessCrawlerThread extends CrawlerThread { final CrawlingConfigHelper crawlingConfigHelper = ComponentUtil.getCrawlingConfigHelper(); final CrawlingInfoHelper crawlingInfoHelper = ComponentUtil.getCrawlingInfoHelper(); final IndexingHelper indexingHelper = ComponentUtil.getIndexingHelper(); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final String url = urlQueue.getUrl(); ResponseData responseData = null; diff --git a/src/main/java/org/codelibs/fess/ds/callback/FileListIndexUpdateCallbackImpl.java b/src/main/java/org/codelibs/fess/ds/callback/FileListIndexUpdateCallbackImpl.java index f8ff5aa0c..9f6ecf66c 100644 --- a/src/main/java/org/codelibs/fess/ds/callback/FileListIndexUpdateCallbackImpl.java +++ b/src/main/java/org/codelibs/fess/ds/callback/FileListIndexUpdateCallbackImpl.java @@ -254,7 +254,7 @@ public class FileListIndexUpdateCallbackImpl implements IndexUpdateCallback { final long maxAccessCount = getMaxAccessCount(paramMap, dataMap); final String url = dataMap.get(fessConfig.getIndexFieldUrl()).toString(); if (maxAccessCount != 1L) { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final IndexingHelper indexingHelper = ComponentUtil.getIndexingHelper(); final long count = indexingHelper.deleteDocumentByQuery(searchEngineClient, QueryBuilders.prefixQuery(fessConfig.getIndexFieldUrl(), url)); @@ -295,7 +295,7 @@ public class FileListIndexUpdateCallbackImpl implements IndexUpdateCallback { } protected void deleteDocuments() { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final IndexingHelper indexingHelper = ComponentUtil.getIndexingHelper(); for (final String url : deleteUrlList) { indexingHelper.deleteDocumentByUrl(searchEngineClient, url); diff --git a/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java b/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java index 9d5cabf9c..9ea65dc37 100644 --- a/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java +++ b/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java @@ -76,7 +76,7 @@ public class IndexUpdateCallbackImpl implements IndexUpdateCallback { final long startTime = System.currentTimeMillis(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); if (logger.isDebugEnabled()) { logger.debug("Adding {}", dataMap); @@ -162,7 +162,7 @@ public class IndexUpdateCallbackImpl implements IndexUpdateCallback { synchronized (docList) { if (!docList.isEmpty()) { final IndexingHelper indexingHelper = ComponentUtil.getIndexingHelper(); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); indexingHelper.sendDocuments(searchEngineClient, docList); } } diff --git a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java index bc383c143..bc110a696 100644 --- a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java +++ b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java @@ -803,25 +803,22 @@ public class SearchEngineClient implements Client { for (final SearchHit hit : hits) { count++; if (!cursor.apply(creator.build(response, hit))) { - if (scrollId != null) { - client.prepareClearScroll().addScrollId(scrollId) - .execute(ActionListener.wrap(res -> {}, e1 -> logger.warn("Failed to clear scrollId.", e1))); - } break; } } response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute() .actionGet(fessConfig.getIndexBulkTimeout()); + if (!scrollId.equals(response.getScrollId())) { + deleteScrollContext(scrollId); + } 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); + } finally { + deleteScrollContext(scrollId); } } diff --git a/src/main/java/org/codelibs/fess/helper/DataIndexHelper.java b/src/main/java/org/codelibs/fess/helper/DataIndexHelper.java index 465edd1f3..6626b352e 100644 --- a/src/main/java/org/codelibs/fess/helper/DataIndexHelper.java +++ b/src/main/java/org/codelibs/fess/helper/DataIndexHelper.java @@ -241,7 +241,7 @@ public class DataIndexHelper { .mustNot(QueryBuilders.existsQuery(fessConfig.getIndexFieldExpires()))) .mustNot(QueryBuilders.termQuery(fessConfig.getIndexFieldSegment(), sessionId)); try { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final String index = fessConfig.getIndexDocumentUpdateIndex(); searchEngineClient.admin().indices().prepareRefresh(index).execute().actionGet(); final long numOfDeleted = searchEngineClient.deleteByQuery(index, queryBuilder); diff --git a/src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java b/src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java index 6bd149d4a..bfc5ee001 100644 --- a/src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java +++ b/src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java @@ -119,7 +119,7 @@ public class KeyMatchHelper { } protected List> getDocumentList(final KeyMatch keyMatch) { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); return searchEngineClient.getDocumentList(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> SearchConditionBuilder @@ -155,7 +155,7 @@ public class KeyMatchHelper { } public List> getBoostedDocumentList(final String term, final int size) { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final Pair> pair = getQueryMap().get(toLowerCase(term)); if (pair == null) { return Collections.emptyList(); diff --git a/src/main/java/org/codelibs/fess/helper/SearchHelper.java b/src/main/java/org/codelibs/fess/helper/SearchHelper.java index ba9de2aa2..4eb6a76f2 100644 --- a/src/main/java/org/codelibs/fess/helper/SearchHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SearchHelper.java @@ -93,7 +93,7 @@ public class SearchHelper { final FessConfig fessConfig = ComponentUtil.getFessConfig(); final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); final List> documentItems = - ComponentUtil.getFessEsClient().search(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> { + ComponentUtil.getSearchEngineClient().search(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> { queryHelper.processSearchPreference(searchRequestBuilder, userBean, query); return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(pageStart).size(pageSize) .facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo()).highlightInfo(params.getHighlightInfo()) @@ -189,7 +189,7 @@ public class SearchHelper { query = ComponentUtil.getQueryStringBuilder().params(params).build() + " sort:" + sortField; } final FessConfig fessConfig = ComponentUtil.getFessConfig(); - return ComponentUtil.getFessEsClient().> scrollSearch(fessConfig.getIndexDocumentSearchIndex(), + return ComponentUtil.getSearchEngineClient().> scrollSearch(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> { final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); queryHelper.processSearchPreference(searchRequestBuilder, userBean, query); @@ -233,7 +233,7 @@ public class SearchHelper { final QueryContext queryContext = ComponentUtil.getQueryHelper().build(params.getType(), query, context -> { context.skipRoleQuery(); }); - return ComponentUtil.getFessEsClient().deleteByQuery(ComponentUtil.getFessConfig().getIndexDocumentUpdateIndex(), + return ComponentUtil.getSearchEngineClient().deleteByQuery(ComponentUtil.getFessConfig().getIndexDocumentUpdateIndex(), queryContext.getQueryBuilder()); } @@ -281,7 +281,7 @@ public class SearchHelper { public OptionalEntity> getDocumentByDocId(final String docId, final String[] fields, final OptionalThing userBean) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - return ComponentUtil.getFessEsClient().getDocument(fessConfig.getIndexDocumentSearchIndex(), builder -> { + return ComponentUtil.getSearchEngineClient().getDocument(fessConfig.getIndexDocumentSearchIndex(), builder -> { final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.termQuery(fessConfig.getIndexFieldDocId(), docId)); final Set roleSet = ComponentUtil.getRoleQueryHelper().build(SearchRequestType.JSON); // TODO SearchRequestType? @@ -300,7 +300,7 @@ public class SearchHelper { public List> getDocumentListByDocIds(final String[] docIds, final String[] fields, final OptionalThing userBean, final SearchRequestType searchRequestType) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - return ComponentUtil.getFessEsClient().getDocumentList(fessConfig.getIndexDocumentSearchIndex(), builder -> { + return ComponentUtil.getSearchEngineClient().getDocumentList(fessConfig.getIndexDocumentSearchIndex(), builder -> { final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(fessConfig.getIndexFieldDocId(), docIds)); final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); @@ -319,14 +319,14 @@ public class SearchHelper { } public boolean update(final String id, final String field, final Object value) { - return ComponentUtil.getFessEsClient().update(ComponentUtil.getFessConfig().getIndexDocumentUpdateIndex(), id, field, value); + return ComponentUtil.getSearchEngineClient().update(ComponentUtil.getFessConfig().getIndexDocumentUpdateIndex(), id, field, value); } public boolean update(final String id, final Consumer builderLambda) { try { final FessConfig fessConfig = ComponentUtil.getFessConfig(); final UpdateRequestBuilder builder = - ComponentUtil.getFessEsClient().prepareUpdate().setIndex(fessConfig.getIndexDocumentUpdateIndex()).setId(id); + ComponentUtil.getSearchEngineClient().prepareUpdate().setIndex(fessConfig.getIndexDocumentUpdateIndex()).setId(id); builderLambda.accept(builder); final UpdateResponse response = builder.execute().actionGet(fessConfig.getIndexIndexTimeout()); return response.getResult() == Result.CREATED || response.getResult() == Result.UPDATED; @@ -336,7 +336,7 @@ public class SearchHelper { } public boolean bulkUpdate(final Consumer consumer) { - final BulkRequestBuilder builder = ComponentUtil.getFessEsClient().prepareBulk(); + final BulkRequestBuilder builder = ComponentUtil.getSearchEngineClient().prepareBulk(); consumer.accept(builder); try { final BulkResponse response = builder.execute().get(); diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java index 5c59ba7ae..d3c0f9624 100644 --- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java @@ -96,7 +96,7 @@ public class SuggestHelper { split(fessConfig.getSuggestFieldRoles(), ",").of(stream -> stream.filter(StringUtil::isNotBlank).forEach(roleFieldNameSet::add)); contentFieldList = Arrays.asList(stream(fessConfig.getSuggestFieldContents()).get(stream -> stream.toArray(n -> new String[n]))); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); searchEngineClient.admin().cluster().prepareHealth().setWaitForYellowStatus().execute() .actionGet(fessConfig.getIndexHealthTimeout()); @@ -208,7 +208,7 @@ public class SuggestHelper { final int docPerReq = fessConfig.getSuggestUpdateDocPerRequestAsInteger(); final SystemHelper systemHelper = ComponentUtil.getSystemHelper(); suggester.indexer().indexFromDocument(() -> { - final ESSourceReader reader = new ESSourceReader(ComponentUtil.getFessEsClient(), suggester.settings(), + final ESSourceReader reader = new ESSourceReader(ComponentUtil.getSearchEngineClient(), suggester.settings(), fessConfig.getIndexDocumentSearchIndex(), "_doc"); // TODO remove type reader.setScrollSize(fessConfig.getSuggestSourceReaderScrollSizeAsInteger()); reader.setLimitDocNumPercentage(fessConfig.getSuggestUpdateContentsLimitNumPercentage()); @@ -243,7 +243,7 @@ public class SuggestHelper { boolQueryBuilder.mustNot(QueryBuilders.termQuery(FieldNames.KINDS, SuggestItem.Kind.QUERY.toString())); boolQueryBuilder.mustNot(QueryBuilders.termQuery(FieldNames.KINDS, SuggestItem.Kind.USER.toString())); - SuggestUtil.deleteByQuery(ComponentUtil.getFessEsClient(), suggester.settings(), suggester.getIndex(), boolQueryBuilder); + SuggestUtil.deleteByQuery(ComponentUtil.getSearchEngineClient(), suggester.settings(), suggester.getIndex(), boolQueryBuilder); } public void purgeSearchlogSuggest(final LocalDateTime time) { @@ -255,7 +255,7 @@ public class SuggestHelper { boolQueryBuilder.must(QueryBuilders.termQuery(FieldNames.KINDS, SuggestItem.Kind.QUERY.toString())); boolQueryBuilder.mustNot(QueryBuilders.termQuery(FieldNames.KINDS, SuggestItem.Kind.USER.toString())); - SuggestUtil.deleteByQuery(ComponentUtil.getFessEsClient(), suggester.settings(), suggester.getIndex(), boolQueryBuilder); + SuggestUtil.deleteByQuery(ComponentUtil.getSearchEngineClient(), suggester.settings(), suggester.getIndex(), boolQueryBuilder); } public long getAllWordsNum() { diff --git a/src/main/java/org/codelibs/fess/helper/SystemHelper.java b/src/main/java/org/codelibs/fess/helper/SystemHelper.java index 8ceac2d2e..30e240397 100644 --- a/src/main/java/org/codelibs/fess/helper/SystemHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SystemHelper.java @@ -413,7 +413,7 @@ public class SystemHelper { } public void setupAdminHtmlData(final TypicalAction action, final ActionRuntime runtime) { - runtime.registerData("developmentMode", ComponentUtil.getFessEsClient().isEmbedded()); + runtime.registerData("developmentMode", ComponentUtil.getSearchEngineClient().isEmbedded()); final FessConfig fessConfig = ComponentUtil.getFessConfig(); final String installationLink = fessConfig.getOnlineHelpInstallation(); runtime.registerData("installationLink", getHelpUrl(installationLink)); @@ -428,7 +428,7 @@ public class SystemHelper { } public void setupSearchHtmlData(final TypicalAction action, final ActionRuntime runtime) { - runtime.registerData("developmentMode", ComponentUtil.getFessEsClient().isEmbedded()); + runtime.registerData("developmentMode", ComponentUtil.getSearchEngineClient().isEmbedded()); final FessConfig fessConfig = ComponentUtil.getFessConfig(); final String installationLink = fessConfig.getOnlineHelpInstallation(); runtime.registerData("installationLink", getHelpUrl(installationLink)); @@ -465,7 +465,7 @@ public class SystemHelper { } public void reloadConfiguration() { - ComponentUtil.getFessEsClient().refresh(); + ComponentUtil.getSearchEngineClient().refresh(); ComponentUtil.getLabelTypeHelper().init(); ComponentUtil.getPathMappingHelper().init(); ComponentUtil.getSuggestHelper().init(); diff --git a/src/main/java/org/codelibs/fess/job/PingSearchEngineJob.java b/src/main/java/org/codelibs/fess/job/PingSearchEngineJob.java index 2448dfb3e..902875c5e 100644 --- a/src/main/java/org/codelibs/fess/job/PingSearchEngineJob.java +++ b/src/main/java/org/codelibs/fess/job/PingSearchEngineJob.java @@ -35,7 +35,7 @@ public class PingSearchEngineJob { private static final Logger logger = LogManager.getLogger(PingSearchEngineJob.class); public String execute() { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); final SystemHelper systemHelper = ComponentUtil.getSystemHelper(); diff --git a/src/main/java/org/codelibs/fess/job/PurgeDocJob.java b/src/main/java/org/codelibs/fess/job/PurgeDocJob.java index 6b8668bd6..ffdd0608d 100644 --- a/src/main/java/org/codelibs/fess/job/PurgeDocJob.java +++ b/src/main/java/org/codelibs/fess/job/PurgeDocJob.java @@ -28,7 +28,7 @@ public class PurgeDocJob { private static final Logger logger = LogManager.getLogger(PurgeDocJob.class); public String execute() { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); final StringBuilder resultBuf = new StringBuilder(); diff --git a/src/main/java/org/codelibs/fess/job/UpdateLabelJob.java b/src/main/java/org/codelibs/fess/job/UpdateLabelJob.java index 1873c297f..2b6d999fd 100644 --- a/src/main/java/org/codelibs/fess/job/UpdateLabelJob.java +++ b/src/main/java/org/codelibs/fess/job/UpdateLabelJob.java @@ -38,7 +38,7 @@ public class UpdateLabelJob { protected QueryBuilder queryBuilder = null; public String execute() { - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final FessConfig fessConfig = ComponentUtil.getFessConfig(); final LabelTypeHelper labelTypeHelper = ComponentUtil.getLabelTypeHelper(); final LanguageHelper languageHelper = ComponentUtil.getLanguageHelper(); diff --git a/src/main/java/org/codelibs/fess/score/ScoreBooster.java b/src/main/java/org/codelibs/fess/score/ScoreBooster.java index cf2bd3526..ea7ff4e75 100644 --- a/src/main/java/org/codelibs/fess/score/ScoreBooster.java +++ b/src/main/java/org/codelibs/fess/score/ScoreBooster.java @@ -51,7 +51,7 @@ public abstract class ScoreBooster { protected Function, String[]> idFinder = params -> { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - final SearchEngineClient client = ComponentUtil.getFessEsClient(); + final SearchEngineClient client = ComponentUtil.getSearchEngineClient(); final String index = fessConfig.getIndexDocumentUpdateIndex(); final Object url = params.get("url"); if (url == null) { @@ -68,7 +68,7 @@ public abstract class ScoreBooster { if (ids.length == 0) { return 0L; } - final SearchEngineClient client = ComponentUtil.getFessEsClient(); + final SearchEngineClient client = ComponentUtil.getSearchEngineClient(); if (bulkRequestBuilder == null) { bulkRequestBuilder = client.prepareBulk(); } @@ -96,7 +96,7 @@ public abstract class ScoreBooster { protected UpdateRequestBuilder createUpdateRequestBuilder() { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - return ComponentUtil.getFessEsClient().prepareUpdate().setIndex(fessConfig.getIndexDocumentSearchIndex()); + return ComponentUtil.getSearchEngineClient().prepareUpdate().setIndex(fessConfig.getIndexDocumentSearchIndex()); } protected void flush() { diff --git a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java index 58571c7e5..83ff119f3 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java +++ b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java @@ -367,7 +367,7 @@ public class ThumbnailManager { this.expiry = expiry; this.fessConfig = ComponentUtil.getFessConfig(); this.maxPurgeSize = fessConfig.getPageThumbnailPurgeMaxFetchSizeAsInteger(); - this.searchEngineClient = ComponentUtil.getFessEsClient(); + this.searchEngineClient = ComponentUtil.getSearchEngineClient(); } protected void deleteFiles() { diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java index bb0bdda89..600df4e5b 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java @@ -151,7 +151,7 @@ public abstract class BaseThumbnailGenerator implements ThumbnailGenerator { // TODO bulk final FessConfig fessConfig = ComponentUtil.getFessConfig(); try { - ComponentUtil.getIndexingHelper().updateDocument(ComponentUtil.getFessEsClient(), thumbnailId, + ComponentUtil.getIndexingHelper().updateDocument(ComponentUtil.getSearchEngineClient(), thumbnailId, fessConfig.getIndexFieldThumbnail(), value); } catch (final Exception e) { logger.warn("Failed to update thumbnail field at {}", thumbnailId, e); @@ -160,7 +160,7 @@ public abstract class BaseThumbnailGenerator implements ThumbnailGenerator { protected boolean process(final String id, final BiPredicate consumer) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - final SearchEngineClient searchEngineClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient(); final IndexingHelper indexingHelper = ComponentUtil.getIndexingHelper(); try { final Map doc = indexingHelper.getDocument(searchEngineClient, id, diff --git a/src/main/java/org/codelibs/fess/timer/SystemMonitorTarget.java b/src/main/java/org/codelibs/fess/timer/SystemMonitorTarget.java index b1b531acf..e3319d959 100644 --- a/src/main/java/org/codelibs/fess/timer/SystemMonitorTarget.java +++ b/src/main/java/org/codelibs/fess/timer/SystemMonitorTarget.java @@ -178,7 +178,7 @@ public class SystemMonitorTarget implements TimeoutTarget { private void appendFesenStats(final StringBuilder buf) { String stats = null; try { - final SearchEngineClient esClient = ComponentUtil.getFessEsClient(); + final SearchEngineClient esClient = ComponentUtil.getSearchEngineClient(); final NodesStatsResponse response = esClient.admin().cluster().prepareNodesStats().all().execute().actionGet(10000L); final XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); diff --git a/src/main/java/org/codelibs/fess/util/ComponentUtil.java b/src/main/java/org/codelibs/fess/util/ComponentUtil.java index 47364d86b..e59b3c245 100644 --- a/src/main/java/org/codelibs/fess/util/ComponentUtil.java +++ b/src/main/java/org/codelibs/fess/util/ComponentUtil.java @@ -357,7 +357,7 @@ public final class ComponentUtil { return getComponent(DATA_SERVICE); } - public static SearchEngineClient getFessEsClient() { + public static SearchEngineClient getSearchEngineClient() { return getComponent(FESS_ES_CLIENT); } diff --git a/src/main/java/org/codelibs/fess/util/SearchEngineUtil.java b/src/main/java/org/codelibs/fess/util/SearchEngineUtil.java index 5520161f2..add17d00d 100644 --- a/src/main/java/org/codelibs/fess/util/SearchEngineUtil.java +++ b/src/main/java/org/codelibs/fess/util/SearchEngineUtil.java @@ -18,6 +18,7 @@ package org.codelibs.fess.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.function.Function; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -25,6 +26,8 @@ import org.codelibs.fesen.common.xcontent.ToXContent; import org.codelibs.fesen.common.xcontent.XContentBuilder; import org.codelibs.fesen.common.xcontent.XContentFactory; import org.codelibs.fesen.common.xcontent.XContentType; +import org.codelibs.fesen.search.SearchHit; +import org.codelibs.fess.es.client.SearchEngineClient; public final class SearchEngineUtil { @@ -49,7 +52,15 @@ public final class SearchEngineUtil { return getXContentBuilderOutputStream((builder, params) -> xContent.toXContent(builder, params), xContentType); } + public static long scroll(String index, Function callback) { + SearchEngineClient client = ComponentUtil.getSearchEngineClient(); + return client. scrollSearch(index, searchRequestBuilder -> true, (searchResponse, hit) -> hit, hit -> { + return callback.apply(hit); + }); + } + public interface XContentBuilderCallback { XContentBuilder apply(XContentBuilder builder, ToXContent.Params params) throws IOException; } + }