fix #2754 add minScore
This commit is contained in:
parent
e123dea93c
commit
fc0a5cd699
3 changed files with 44 additions and 19 deletions
|
@ -79,6 +79,10 @@ public abstract class SearchRequestParams {
|
|||
return null;
|
||||
}
|
||||
|
||||
public Float getMinScore() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasConditionQuery() {
|
||||
final Map<String, String[]> conditions = getConditions();
|
||||
return !isEmptyArray(conditions.get(AS_Q))//
|
||||
|
|
|
@ -1228,6 +1228,7 @@ public class SearchEngineClient implements Client {
|
|||
protected SearchRequestType searchRequestType = SearchRequestType.SEARCH;
|
||||
protected boolean isScroll = false;
|
||||
protected String trackTotalHits = null;
|
||||
protected Float minScore = null;
|
||||
|
||||
public static SearchConditionBuilder builder(final SearchRequestBuilder searchRequestBuilder) {
|
||||
return new SearchConditionBuilder(searchRequestBuilder);
|
||||
|
@ -1307,6 +1308,11 @@ public class SearchEngineClient implements Client {
|
|||
return this;
|
||||
}
|
||||
|
||||
public SearchConditionBuilder minScore(final Float minScore) {
|
||||
this.minScore = minScore;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean build() {
|
||||
if (StringUtil.isBlank(query)) {
|
||||
return false;
|
||||
|
@ -1325,6 +1331,7 @@ public class SearchEngineClient implements Client {
|
|||
searchRequestBuilder.setFrom(offset).setSize(size);
|
||||
|
||||
buildTrackTotalHits(fessConfig);
|
||||
buildMinScore(fessConfig);
|
||||
|
||||
if (responseFields != null) {
|
||||
searchRequestBuilder.setFetchSource(responseFields, null);
|
||||
|
@ -1355,6 +1362,12 @@ public class SearchEngineClient implements Client {
|
|||
return true;
|
||||
}
|
||||
|
||||
protected void buildMinScore(final FessConfig fessConfig) {
|
||||
if (minScore != null) {
|
||||
searchRequestBuilder.setMinScore(minScore);
|
||||
}
|
||||
}
|
||||
|
||||
protected void buildTrackTotalHits(final FessConfig fessConfig) {
|
||||
if (isScroll) {
|
||||
return;
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.logging.log4j.Logger;
|
|||
import org.codelibs.core.stream.StreamUtil;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.entity.SearchRequestParams;
|
||||
import org.codelibs.fess.es.client.SearchEngineClient.SearchCondition;
|
||||
import org.codelibs.fess.es.client.SearchEngineClient.SearchConditionBuilder;
|
||||
import org.codelibs.fess.helper.ViewHelper;
|
||||
import org.codelibs.fess.mylasta.action.FessUserBean;
|
||||
|
@ -33,6 +34,7 @@ import org.codelibs.fess.util.FacetResponse;
|
|||
import org.dbflute.optional.OptionalEntity;
|
||||
import org.dbflute.optional.OptionalThing;
|
||||
import org.lastaflute.web.util.LaRequestUtil;
|
||||
import org.opensearch.action.search.SearchRequestBuilder;
|
||||
import org.opensearch.action.search.SearchResponse;
|
||||
import org.opensearch.common.document.DocumentField;
|
||||
import org.opensearch.search.SearchHit;
|
||||
|
@ -107,26 +109,32 @@ public class DefaultSearcher extends RankFusionSearcher {
|
|||
protected OptionalEntity<SearchResponse> sendRequest(final String query, final SearchRequestParams params,
|
||||
final OptionalThing<FessUserBean> userBean) {
|
||||
final FessConfig fessConfig = ComponentUtil.getFessConfig();
|
||||
final int pageSize = params.getPageSize();
|
||||
return ComponentUtil.getSearchEngineClient().search(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> {
|
||||
return ComponentUtil.getSearchEngineClient().search(fessConfig.getIndexDocumentSearchIndex(),
|
||||
createSearchCondition(query, params, userBean), (searchRequestBuilder, execTime, searchResponse) -> {
|
||||
searchResponse.ifPresent(r -> {
|
||||
if (r.getTotalShards() != r.getSuccessfulShards() && fessConfig.isQueryTimeoutLogging()) {
|
||||
// partial results
|
||||
final StringBuilder buf = new StringBuilder(1000);
|
||||
buf.append("[SEARCH TIMEOUT] {\"exec_time\":").append(execTime)//
|
||||
.append(",\"request\":").append(searchRequestBuilder.toString())//
|
||||
.append(",\"response\":").append(r.toString()).append('}');
|
||||
logger.warn(buf.toString());
|
||||
}
|
||||
});
|
||||
return searchResponse;
|
||||
});
|
||||
}
|
||||
|
||||
protected SearchCondition<SearchRequestBuilder> createSearchCondition(final String query, final SearchRequestParams params,
|
||||
final OptionalThing<FessUserBean> userBean) {
|
||||
return searchRequestBuilder -> {
|
||||
ComponentUtil.getQueryHelper().processSearchPreference(searchRequestBuilder, userBean, query);
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(params.getStartPosition()).size(pageSize)
|
||||
.facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo()).highlightInfo(params.getHighlightInfo())
|
||||
.similarDocHash(params.getSimilarDocHash()).responseFields(params.getResponseFields())
|
||||
.searchRequestType(params.getType()).trackTotalHits(params.getTrackTotalHits()).build();
|
||||
}, (searchRequestBuilder, execTime, searchResponse) -> {
|
||||
searchResponse.ifPresent(r -> {
|
||||
if (r.getTotalShards() != r.getSuccessfulShards() && fessConfig.isQueryTimeoutLogging()) {
|
||||
// partial results
|
||||
final StringBuilder buf = new StringBuilder(1000);
|
||||
buf.append("[SEARCH TIMEOUT] {\"exec_time\":").append(execTime)//
|
||||
.append(",\"request\":").append(searchRequestBuilder.toString())//
|
||||
.append(",\"response\":").append(r.toString()).append('}');
|
||||
logger.warn(buf.toString());
|
||||
}
|
||||
});
|
||||
return searchResponse;
|
||||
});
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(params.getStartPosition())
|
||||
.size(params.getPageSize()).facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo())
|
||||
.highlightInfo(params.getHighlightInfo()).similarDocHash(params.getSimilarDocHash())
|
||||
.responseFields(params.getResponseFields()).searchRequestType(params.getType())
|
||||
.trackTotalHits(params.getTrackTotalHits()).minScore(params.getMinScore()).build();
|
||||
};
|
||||
}
|
||||
|
||||
protected Map<String, Object> parseSearchHit(final FessConfig fessConfig, final String hlPrefix, final SearchHit searchHit) {
|
||||
|
|
Loading…
Add table
Reference in a new issue