diff --git a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java index db6729b00..74d2ede4e 100644 --- a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java +++ b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java @@ -35,6 +35,7 @@ import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.Constants; import org.codelibs.fess.InvalidQueryException; import org.codelibs.fess.ResultOffsetExceededException; +import org.codelibs.fess.app.web.RootAction; import org.codelibs.fess.app.web.RootForm; import org.codelibs.fess.app.web.base.FessSearchAction; import org.codelibs.fess.client.FessEsClient.SearchConditionBuilder; @@ -139,7 +140,7 @@ public class SearchAction extends FessSearchAction { if (StringUtil.isBlank(form.query) && form.fields.isEmpty()) { // redirect to index page form.query = null; - return redirect(SearchAction.class); + return redirect(RootAction.class); } return asHtml(path_SearchJsp).renderWith(data -> { @@ -272,7 +273,7 @@ public class SearchAction extends FessSearchAction { form.start = String.valueOf(DEFAULT_START_COUNT); } else { try { - Long.parseLong(form.start); + Integer.parseInt(form.start); } catch (final NumberFormatException e) { form.start = String.valueOf(DEFAULT_START_COUNT); } @@ -287,11 +288,14 @@ public class SearchAction extends FessSearchAction { List> documentItems = null; try { documentItems = - fessEsClient.getDocumentList(fieldHelper.docIndex, fieldHelper.docType, - searchRequestBuilder -> { - return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(pageStart).size(pageNum) - .facetInfo(form.facet).geoInfo(form.geo).responseFields(queryHelper.getResponseFields()).build(); - }); + fessEsClient.search(fieldHelper.docIndex, fieldHelper.docType, searchRequestBuilder -> { + return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset((int) pageStart).size(pageNum) + .facetInfo(form.facet).geoInfo(form.geo).responseFields(queryHelper.getResponseFields()).build(); + }, (searchRequestBuilder, execTime, searchResponse) -> { + QueryResponseList queryResponseList = ComponentUtil.getQueryResponseList(); + queryResponseList.init(searchResponse, pageStart, pageNum); + return queryResponseList; + }); } catch (final InvalidQueryException e) { if (logger.isDebugEnabled()) { logger.debug(e.getMessage(), e); @@ -310,7 +314,6 @@ public class SearchAction extends FessSearchAction { // search final QueryResponseList queryResponseList = (QueryResponseList) documentItems; data.register("facetResponse", queryResponseList.getFacetResponse()); - data.register("moreLikeThisResponse", queryResponseList.getMoreLikeThisResponse()); final NumberFormat nf = NumberFormat.getInstance(LaRequestUtil.getRequest().getLocale()); nf.setMaximumIntegerDigits(2); nf.setMaximumFractionDigits(2); diff --git a/src/main/java/org/codelibs/fess/util/QueryResponseList.java b/src/main/java/org/codelibs/fess/util/QueryResponseList.java index f3baf8584..446ccffae 100644 --- a/src/main/java/org/codelibs/fess/util/QueryResponseList.java +++ b/src/main/java/org/codelibs/fess/util/QueryResponseList.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; +import java.util.Optional; import org.apache.commons.lang3.StringUtils; import org.codelibs.fess.helper.QueryHelper; @@ -70,8 +71,6 @@ public class QueryResponseList implements List> { protected FacetResponse facetResponse; - protected MoreLikeThisResponse moreLikeThisResponse; - protected boolean partialResults = false; protected long queryTime; @@ -85,11 +84,10 @@ public class QueryResponseList implements List> { this.parent = parent; } - public void init(final SearchResponse searchResponse, final long start, final int pageSize) { - long numFound = 0; - if (searchResponse != null) { + public void init(final Optional searchResponseOpt, final int start, final int pageSize) { + searchResponseOpt.ifPresent(searchResponse -> { final SearchHits searchHits = searchResponse.getHits(); - numFound = searchHits.getTotalHits(); + allRecordCount = searchHits.getTotalHits(); queryTime = searchResponse.getTookInMillis(); if (searchResponse.getTotalShards() != searchResponse.getSuccessfulShards()) { @@ -97,65 +95,71 @@ public class QueryResponseList implements List> { } // build highlighting fields - final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); - ComponentUtil.getFieldHelper(); - final String hlPrefix = queryHelper.getHighlightingPrefix(); - for (final SearchHit searchHit : searchHits.getHits()) { - final Map docMap = new HashMap(); - docMap.putAll(searchHit.getSource()); + final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); + ComponentUtil.getFieldHelper(); + final String hlPrefix = queryHelper.getHighlightingPrefix(); + for (final SearchHit searchHit : searchHits.getHits()) { + final Map docMap = new HashMap(); + if (searchHit.getSource() == null) { + searchHit.getFields().forEach((key, value) -> { + docMap.put(key, value.getValue()); + }); + } else { + docMap.putAll(searchHit.getSource()); + } - final Map highlightFields = searchHit.getHighlightFields(); - try { - if (highlightFields != null) { - for (final Map.Entry entry : highlightFields.entrySet()) { - final HighlightField highlightField = entry.getValue(); - final Text[] fragments = highlightField.fragments(); - if (fragments != null && fragments.length != 0) { - final String[] texts = new String[fragments.length]; - for (int i = 0; i < fragments.length; i++) { - texts[i] = fragments[i].string(); + final Map highlightFields = searchHit.getHighlightFields(); + try { + if (highlightFields != null) { + for (final Map.Entry entry : highlightFields.entrySet()) { + final HighlightField highlightField = entry.getValue(); + final Text[] fragments = highlightField.fragments(); + if (fragments != null && fragments.length != 0) { + final String[] texts = new String[fragments.length]; + for (int i = 0; i < fragments.length; i++) { + texts[i] = fragments[i].string(); + } + final String value = StringUtils.join(texts, "..."); + docMap.put(hlPrefix + highlightField.getName(), value); } - final String value = StringUtils.join(texts, "..."); - docMap.put(hlPrefix + highlightField.getName(), value); } } + } catch (final Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Could not create a highlighting value: " + docMap, e); + } } - } catch (final Exception e) { - if (logger.isDebugEnabled()) { - logger.debug("Could not create a highlighting value: " + docMap, e); + + // ContentTitle + final ViewHelper viewHelper = ComponentUtil.getViewHelper(); + if (viewHelper != null) { + docMap.put("contentTitle", viewHelper.getContentTitle(docMap)); + docMap.put("contentDescription", viewHelper.getContentDescription(docMap)); + docMap.put("urlLink", viewHelper.getUrlLink(docMap)); + docMap.put("sitePath", viewHelper.getSitePath(docMap)); } + + parent.add(docMap); } - // ContentTitle - final ViewHelper viewHelper = ComponentUtil.getViewHelper(); - if (viewHelper != null) { - docMap.put("contentTitle", viewHelper.getContentTitle(docMap)); - docMap.put("contentDescription", viewHelper.getContentDescription(docMap)); - docMap.put("urlLink", viewHelper.getUrlLink(docMap)); - docMap.put("sitePath", viewHelper.getSitePath(docMap)); + // facet + final Aggregations aggregations = searchResponse.getAggregations(); + if (aggregations != null) { + facetResponse = new FacetResponse(aggregations); } - parent.add(docMap); - } + }); - // facet - final Aggregations aggregations = searchResponse.getAggregations(); - if (aggregations != null) { - facetResponse = new FacetResponse(aggregations); - } - - } - calculatePageInfo(start, pageSize, numFound); + calculatePageInfo(start, pageSize); } - protected void calculatePageInfo(final long start, final int size, final long numFound) { + protected void calculatePageInfo(final int start, final int size) { pageSize = size; - allRecordCount = numFound; allPageCount = (int) ((allRecordCount - 1) / pageSize) + 1; existPrevPage = start > 0; existNextPage = start < (long) (allPageCount - 1) * (long) pageSize; currentPageNumber = (int) (start / pageSize) + 1; - currentStartRecordNumber = numFound != 0 ? (currentPageNumber - 1) * pageSize + 1 : 0; + currentStartRecordNumber = allRecordCount != 0 ? (currentPageNumber - 1) * pageSize + 1 : 0; currentEndRecordNumber = currentPageNumber * pageSize; currentEndRecordNumber = allRecordCount < currentEndRecordNumber ? allRecordCount : currentEndRecordNumber; @@ -364,10 +368,6 @@ public class QueryResponseList implements List> { return facetResponse; } - public MoreLikeThisResponse getMoreLikeThisResponse() { - return moreLikeThisResponse; - } - public boolean isPartialResults() { return partialResults; } diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml index ea8dc3070..85ffa8769 100644 --- a/src/main/resources/app.xml +++ b/src/main/resources/app.xml @@ -27,21 +27,21 @@ 1 ["label"] [ - "lastModified:[NOW/DAY-1DAY TO NOW]", - "lastModified:[NOW/DAY-7DAYS TO NOW]", - "lastModified:[NOW/DAY-1MONTH TO NOW]", - "lastModified:[NOW/DAY-1YEAR TO NOW]", - "contentLength:[0 TO 9999]", - "contentLength:[10000 TO 99999]", - "contentLength:[100000 TO 499999]", - "contentLength:[500000 TO 999999]", - "contentLength:[1000000 TO *]", - "filetype_s:html", - "filetype_s:word", - "filetype_s:excel", - "filetype_s:powerpoint", - "filetype_s:pdf", - "filetype_s:others" + "last_modified:[now/d-1d TO now]", + "last_modified:[now/d-7d TO now]", + "last_modified:[now/d-1M TO now]", + "last_modified:[now/d-1y TO now]", + "content_length:[0 TO 9999]", + "content_length:[10000 TO 99999]", + "content_length:[100000 TO 499999]", + "content_length:[500000 TO 999999]", + "content_length:[1000000 TO *]", + "filetype:html", + "filetype:word", + "filetype:excel", + "filetype:powerpoint", + "filetype:pdf", + "filetype:others" ] @@ -123,19 +123,19 @@ "label.facet_lastModified_title" "label.facet_lastModified_1day" - "lastModified:[NOW/DAY-1DAY TO NOW]" + "last_modified:[now/d-1d TO now]" "label.facet_lastModified_1week" - "lastModified:[NOW/DAY-7DAYS TO NOW]" + "last_modified:[now/d-7d TO now]" "label.facet_lastModified_1month" - "lastModified:[NOW/DAY-1MONTH TO NOW]" + "last_modified:[now/d-1M TO now]" "label.facet_lastModified_1year" - "lastModified:[NOW/DAY-1YEAR TO NOW]" + "last_modified:[now/d-1y TO now]" @@ -146,23 +146,23 @@ "label.facet_contentLength_title" "label.facet_contentLength_10k" - "contentLength:[0 TO 9999]" + "content_length:[0 TO 9999]" "label.facet_contentLength_10kto100k" - "contentLength:[10000 TO 99999]" + "content_length:[10000 TO 99999]" "label.facet_contentLength_100kto500k" - "contentLength:[100000 TO 499999]" + "content_length:[100000 TO 499999]" "label.facet_contentLength_500kto1m" - "contentLength:[500000 TO 999999]" + "content_length:[500000 TO 999999]" "label.facet_contentLength_1m" - "contentLength:[1000000 TO *]" + "content_length:[1000000 TO *]" @@ -173,27 +173,27 @@ "label.facet_filetype_title" "label.facet_filetype_html" - "filetype_s:html" + "filetype:html" "label.facet_filetype_word" - "filetype_s:word" + "filetype:word" "label.facet_filetype_excel" - "filetype_s:excel" + "filetype:excel" "label.facet_filetype_powerpoint" - "filetype_s:powerpoint" + "filetype:powerpoint" "label.facet_filetype_pdf" - "filetype_s:pdf" + "filetype:pdf" "label.facet_filetype_others" - "filetype_s:others" + "filetype:others"