fix #2315 add track_total_hits
This commit is contained in:
parent
59382c4c9a
commit
9a182f4f0b
7 changed files with 65 additions and 18 deletions
|
@ -433,4 +433,6 @@ public class Constants extends CoreLibConstants {
|
|||
public static final String FESS_VAR_PATH = "fess.var.path";
|
||||
|
||||
public static final String FESS_LOG_LEVEL = "fess.log.level";
|
||||
|
||||
public static final String TRACK_TOTAL_HITS = "track_total_hits";
|
||||
}
|
||||
|
|
|
@ -447,6 +447,11 @@ public class GsaApiManager extends BaseApiManager implements WebApiManager {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTrackTotalHits() {
|
||||
return request.getParameter(Constants.TRACK_TOTAL_HITS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQuery() {
|
||||
return request.getParameter("q");
|
||||
|
|
|
@ -682,6 +682,11 @@ public class JsonApiManager extends BaseJsonApiManager {
|
|||
this.fessConfig = fessConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTrackTotalHits() {
|
||||
return request.getParameter(Constants.TRACK_TOTAL_HITS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQuery() {
|
||||
return request.getParameter("q");
|
||||
|
|
|
@ -61,6 +61,9 @@ public class SearchForm extends SearchRequestParams {
|
|||
@Size(max = 1000)
|
||||
public String sdh;
|
||||
|
||||
@Size(max = 100)
|
||||
public String track_total_hits;
|
||||
|
||||
// advance
|
||||
|
||||
@Override
|
||||
|
@ -157,4 +160,10 @@ public class SearchForm extends SearchRequestParams {
|
|||
public Map<String, String[]> getConditions() {
|
||||
return as;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTrackTotalHits() {
|
||||
return track_total_hits;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -72,6 +72,10 @@ public abstract class SearchRequestParams {
|
|||
|
||||
public abstract String getSimilarDocHash();
|
||||
|
||||
public String getTrackTotalHits() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasConditionQuery() {
|
||||
final Map<String, String[]> conditions = getConditions();
|
||||
return !isEmptyArray(conditions.get(AS_Q))//
|
||||
|
|
|
@ -1007,17 +1007,18 @@ public class FessEsClient implements Client {
|
|||
}
|
||||
|
||||
public static class SearchConditionBuilder {
|
||||
private final SearchRequestBuilder searchRequestBuilder;
|
||||
private String query;
|
||||
private String[] responseFields;
|
||||
private int offset = Constants.DEFAULT_START_COUNT;
|
||||
private int size = Constants.DEFAULT_PAGE_SIZE;
|
||||
private GeoInfo geoInfo;
|
||||
private FacetInfo facetInfo;
|
||||
private HighlightInfo highlightInfo;
|
||||
private String similarDocHash;
|
||||
private SearchRequestType searchRequestType = SearchRequestType.SEARCH;
|
||||
private boolean isScroll = false;
|
||||
protected final SearchRequestBuilder searchRequestBuilder;
|
||||
protected String query;
|
||||
protected String[] responseFields;
|
||||
protected int offset = Constants.DEFAULT_START_COUNT;
|
||||
protected int size = Constants.DEFAULT_PAGE_SIZE;
|
||||
protected GeoInfo geoInfo;
|
||||
protected FacetInfo facetInfo;
|
||||
protected HighlightInfo highlightInfo;
|
||||
protected String similarDocHash;
|
||||
protected SearchRequestType searchRequestType = SearchRequestType.SEARCH;
|
||||
protected boolean isScroll = false;
|
||||
protected String trackTotalHits = null;
|
||||
|
||||
public static SearchConditionBuilder builder(final SearchRequestBuilder searchRequestBuilder) {
|
||||
return new SearchConditionBuilder(searchRequestBuilder);
|
||||
|
@ -1092,6 +1093,11 @@ public class FessEsClient implements Client {
|
|||
return this;
|
||||
}
|
||||
|
||||
public SearchConditionBuilder trackTotalHits(final String trackTotalHits) {
|
||||
this.trackTotalHits = trackTotalHits;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean build() {
|
||||
if (StringUtil.isBlank(query)) {
|
||||
return false;
|
||||
|
@ -1108,12 +1114,7 @@ public class FessEsClient implements Client {
|
|||
|
||||
searchRequestBuilder.setFrom(offset).setSize(size);
|
||||
|
||||
final Object trackTotalHitsValue = fessConfig.getQueryTrackTotalHitsValue();
|
||||
if (trackTotalHitsValue instanceof Boolean) {
|
||||
searchRequestBuilder.setTrackTotalHits((Boolean) trackTotalHitsValue);
|
||||
} else if (trackTotalHitsValue instanceof Number) {
|
||||
searchRequestBuilder.setTrackTotalHitsUpTo(((Number) trackTotalHitsValue).intValue());
|
||||
}
|
||||
buildTrackTotalHits(fessConfig);
|
||||
|
||||
if (responseFields != null) {
|
||||
searchRequestBuilder.setFetchSource(responseFields, null);
|
||||
|
@ -1144,6 +1145,27 @@ public class FessEsClient implements Client {
|
|||
return true;
|
||||
}
|
||||
|
||||
protected void buildTrackTotalHits(final FessConfig fessConfig) {
|
||||
if (StringUtil.isNotBlank(trackTotalHits)) {
|
||||
try {
|
||||
searchRequestBuilder.setTrackTotalHitsUpTo(Integer.valueOf(trackTotalHits));
|
||||
return;
|
||||
} catch (final NumberFormatException e) {
|
||||
// ignore
|
||||
}
|
||||
if (Constants.TRUE.equalsIgnoreCase(trackTotalHits) || Constants.FALSE.equalsIgnoreCase(trackTotalHits)) {
|
||||
searchRequestBuilder.setTrackTotalHits(Boolean.valueOf(trackTotalHits));
|
||||
return;
|
||||
}
|
||||
}
|
||||
final Object trackTotalHitsValue = fessConfig.getQueryTrackTotalHitsValue();
|
||||
if (trackTotalHitsValue instanceof Boolean) {
|
||||
searchRequestBuilder.setTrackTotalHits((Boolean) trackTotalHitsValue);
|
||||
} else if (trackTotalHitsValue instanceof Number) {
|
||||
searchRequestBuilder.setTrackTotalHitsUpTo(((Number) trackTotalHitsValue).intValue());
|
||||
}
|
||||
}
|
||||
|
||||
protected void buildFacet(final QueryHelper queryHelper, final FessConfig fessConfig) {
|
||||
stream(facetInfo.field).of(
|
||||
stream -> stream.forEach(f -> {
|
||||
|
|
|
@ -99,7 +99,7 @@ public class SearchHelper {
|
|||
return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(pageStart).size(pageSize)
|
||||
.facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo()).highlightInfo(params.getHighlightInfo())
|
||||
.similarDocHash(params.getSimilarDocHash()).responseFields(queryHelper.getResponseFields())
|
||||
.searchRequestType(params.getType()).build();
|
||||
.searchRequestType(params.getType()).trackTotalHits(params.getTrackTotalHits()).build();
|
||||
}, (searchRequestBuilder, execTime, searchResponse) -> {
|
||||
searchResponse.ifPresent(r -> {
|
||||
if (r.getTotalShards() != r.getSuccessfulShards() && fessConfig.isQueryTimeoutLogging()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue