fix #1660 add _query preference
This commit is contained in:
parent
60da70ca83
commit
25498b625a
4 changed files with 42 additions and 29 deletions
|
@ -97,20 +97,23 @@ public class SearchService {
|
|||
request.setAttribute(Constants.REQUEST_QUERIES, params.getQuery());
|
||||
});
|
||||
|
||||
final String query = ComponentUtil.getQueryStringBuilder().params(params).build();
|
||||
|
||||
final int pageStart = params.getStartPosition();
|
||||
final int pageSize = params.getPageSize();
|
||||
final String sortField = params.getSort();
|
||||
final String query;
|
||||
if (StringUtil.isBlank(sortField)) {
|
||||
query = ComponentUtil.getQueryStringBuilder().params(params).build();
|
||||
} else {
|
||||
query = ComponentUtil.getQueryStringBuilder().params(params).build() + " sort:" + sortField;
|
||||
}
|
||||
final List<Map<String, Object>> documentItems =
|
||||
fessEsClient.search(
|
||||
fessConfig.getIndexDocumentSearchIndex(),
|
||||
fessConfig.getIndexDocumentType(),
|
||||
searchRequestBuilder -> {
|
||||
queryHelper.processSearchPreference(searchRequestBuilder, userBean);
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder)
|
||||
.query(StringUtil.isBlank(sortField) ? query : query + " sort:" + sortField).offset(pageStart)
|
||||
.size(pageSize).facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo())
|
||||
queryHelper.processSearchPreference(searchRequestBuilder, userBean, query);
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder).query(query).offset(pageStart).size(pageSize)
|
||||
.facetInfo(params.getFacetInfo()).geoInfo(params.getGeoInfo())
|
||||
.similarDocHash(params.getSimilarDocHash()).responseFields(queryHelper.getResponseFields())
|
||||
.searchRequestType(params.getType()).build();
|
||||
}, (searchRequestBuilder, execTime, searchResponse) -> {
|
||||
|
@ -184,17 +187,20 @@ public class SearchService {
|
|||
request.setAttribute(Constants.REQUEST_QUERIES, params.getQuery());
|
||||
});
|
||||
|
||||
final String query = ComponentUtil.getQueryStringBuilder().params(params).build();
|
||||
|
||||
final int pageSize = params.getPageSize();
|
||||
final String sortField = params.getSort();
|
||||
final String query;
|
||||
if (StringUtil.isBlank(sortField)) {
|
||||
query = ComponentUtil.getQueryStringBuilder().params(params).build();
|
||||
} else {
|
||||
query = ComponentUtil.getQueryStringBuilder().params(params).build() + " sort:" + sortField;
|
||||
}
|
||||
return fessEsClient.<Map<String, Object>> scrollSearch(
|
||||
fessConfig.getIndexDocumentSearchIndex(),
|
||||
fessConfig.getIndexDocumentType(),
|
||||
searchRequestBuilder -> {
|
||||
queryHelper.processSearchPreference(searchRequestBuilder, userBean);
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder).scroll()
|
||||
.query(StringUtil.isBlank(sortField) ? query : query + " sort:" + sortField).size(pageSize)
|
||||
queryHelper.processSearchPreference(searchRequestBuilder, userBean, query);
|
||||
return SearchConditionBuilder.builder(searchRequestBuilder).scroll().query(query).size(pageSize)
|
||||
.responseFields(queryHelper.getScrollResponseFields()).searchRequestType(params.getType()).build();
|
||||
},
|
||||
(searchResponse, hit) -> {
|
||||
|
@ -296,7 +302,7 @@ public class SearchService {
|
|||
}
|
||||
builder.setQuery(boolQuery);
|
||||
builder.setFetchSource(fields, null);
|
||||
queryHelper.processSearchPreference(builder, userBean);
|
||||
queryHelper.processSearchPreference(builder, userBean, docId);
|
||||
return true;
|
||||
});
|
||||
|
||||
|
@ -323,7 +329,7 @@ public class SearchService {
|
|||
builder.setQuery(boolQuery);
|
||||
builder.setSize(fessConfig.getPagingSearchPageMaxSizeAsInteger().intValue());
|
||||
builder.setFetchSource(fields, null);
|
||||
queryHelper.processSearchPreference(builder, userBean);
|
||||
queryHelper.processSearchPreference(builder, userBean, String.join(StringUtil.EMPTY, docIds));
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -77,7 +77,9 @@ import org.lastaflute.web.util.LaRequestUtil;
|
|||
|
||||
public class QueryHelper {
|
||||
|
||||
private static final String ES_SCORE_FIELD = "_score";
|
||||
protected static final String PREFERENCE_QUERY = "_query";
|
||||
|
||||
protected static final String ES_SCORE_FIELD = "_score";
|
||||
|
||||
protected static final String SCORE_SORT_VALUE = "score";
|
||||
|
||||
|
@ -721,7 +723,8 @@ public class QueryHelper {
|
|||
return apiResponseFieldSet.contains(field);
|
||||
}
|
||||
|
||||
public void processSearchPreference(final SearchRequestBuilder searchRequestBuilder, final OptionalThing<FessUserBean> userBean) {
|
||||
public void processSearchPreference(final SearchRequestBuilder searchRequestBuilder, final OptionalThing<FessUserBean> userBean,
|
||||
final String query) {
|
||||
userBean.map(user -> {
|
||||
if (user.hasRoles(ComponentUtil.getFessConfig().getAuthenticationAdminRolesAsArray())) {
|
||||
return Constants.SEARCH_PREFERENCE_LOCAL;
|
||||
|
@ -738,25 +741,29 @@ public class QueryHelper {
|
|||
}
|
||||
final Object accessType = r.getAttribute(Constants.SEARCH_LOG_ACCESS_TYPE);
|
||||
if (Constants.SEARCH_LOG_ACCESS_TYPE_JSON.equals(accessType)) {
|
||||
return processJsonSearchPreference(r);
|
||||
return processJsonSearchPreference(r, query);
|
||||
} else if (Constants.SEARCH_LOG_ACCESS_TYPE_GSA.equals(accessType)) {
|
||||
return processGsaSearchPreference(r);
|
||||
return processGsaSearchPreference(r, query);
|
||||
}
|
||||
return null;
|
||||
}).ifPresent(p -> searchRequestBuilder.setPreference(p)));
|
||||
}
|
||||
|
||||
protected String processJsonSearchPreference(final HttpServletRequest req) {
|
||||
protected String processJsonSearchPreference(final HttpServletRequest req, final String query) {
|
||||
final String pref = ComponentUtil.getFessConfig().getQueryJsonDefaultPreference();
|
||||
if (StringUtil.isNotBlank(pref)) {
|
||||
if (PREFERENCE_QUERY.equals(pref)) {
|
||||
return Integer.toString(query.hashCode());
|
||||
} else if (StringUtil.isNotBlank(pref)) {
|
||||
return pref;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected String processGsaSearchPreference(final HttpServletRequest req) {
|
||||
protected String processGsaSearchPreference(final HttpServletRequest req, final String query) {
|
||||
final String pref = ComponentUtil.getFessConfig().getQueryGsaDefaultPreference();
|
||||
if (StringUtil.isNotBlank(pref)) {
|
||||
if (PREFERENCE_QUERY.equals(pref)) {
|
||||
return Integer.toString(query.hashCode());
|
||||
} else if (StringUtil.isNotBlank(pref)) {
|
||||
return pref;
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -648,10 +648,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
/** The key of the configuration. e.g. */
|
||||
String QUERY_DEFAULT_LANGUAGES = "query.default.languages";
|
||||
|
||||
/** The key of the configuration. e.g. _local */
|
||||
/** The key of the configuration. e.g. _query */
|
||||
String QUERY_JSON_DEFAULT_PREFERENCE = "query.json.default.preference";
|
||||
|
||||
/** The key of the configuration. e.g. _local */
|
||||
/** The key of the configuration. e.g. _query */
|
||||
String QUERY_GSA_DEFAULT_PREFERENCE = "query.gsa.default.preference";
|
||||
|
||||
/** The key of the configuration. e.g. ar=ar
|
||||
|
@ -3343,14 +3343,14 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
|
||||
/**
|
||||
* Get the value for the key 'query.json.default.preference'. <br>
|
||||
* The value is, e.g. _local <br>
|
||||
* The value is, e.g. _query <br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
*/
|
||||
String getQueryJsonDefaultPreference();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'query.gsa.default.preference'. <br>
|
||||
* The value is, e.g. _local <br>
|
||||
* The value is, e.g. _query <br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
*/
|
||||
String getQueryGsaDefaultPreference();
|
||||
|
@ -8310,8 +8310,8 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
defaultMap.put(FessConfig.QUERY_COLLAPSE_INNER_HITS_SIZE, "0");
|
||||
defaultMap.put(FessConfig.QUERY_COLLAPSE_INNER_HITS_SORTS, "");
|
||||
defaultMap.put(FessConfig.QUERY_DEFAULT_LANGUAGES, "");
|
||||
defaultMap.put(FessConfig.QUERY_JSON_DEFAULT_PREFERENCE, "_local");
|
||||
defaultMap.put(FessConfig.QUERY_GSA_DEFAULT_PREFERENCE, "_local");
|
||||
defaultMap.put(FessConfig.QUERY_JSON_DEFAULT_PREFERENCE, "_query");
|
||||
defaultMap.put(FessConfig.QUERY_GSA_DEFAULT_PREFERENCE, "_query");
|
||||
defaultMap
|
||||
.put(FessConfig.QUERY_LANGUAGE_MAPPING,
|
||||
"ar=ar\nbg=bg\nbn=bn\nca=ca\nckb-iq=ckb-iq\nckb_IQ=ckb-iq\ncs=cs\nda=da\nde=de\nel=el\nen=en\nen-ie=en-ie\nen_IE=en-ie\nes=es\net=et\neu=eu\nfa=fa\nfi=fi\nfr=fr\ngl=gl\ngu=gu\nhe=he\nhi=hi\nhr=hr\nhu=hu\nhy=hy\nid=id\nit=it\nja=ja\nko=ko\nlt=lt\nlv=lv\nmk=mk\nml=ml\nnl=nl\nno=no\npa=pa\npl=pl\npt=pt\npt-br=pt-br\npt_BR=pt-br\nro=ro\nru=ru\nsi=si\nsq=sq\nsv=sv\nta=ta\nte=te\nth=th\ntl=tl\ntr=tr\nuk=uk\nur=ur\nvi=vi\nzh-cn=zh-cn\nzh_CN=zh-cn\nzh-tw=zh-tw\nzh_TW=zh-tw\nzh=zh\n");
|
||||
|
|
|
@ -315,8 +315,8 @@ query.collapse.inner.hits.name=similar_docs
|
|||
query.collapse.inner.hits.size=0
|
||||
query.collapse.inner.hits.sorts=
|
||||
query.default.languages=
|
||||
query.json.default.preference=_local
|
||||
query.gsa.default.preference=_local
|
||||
query.json.default.preference=_query
|
||||
query.gsa.default.preference=_query
|
||||
query.language.mapping=\
|
||||
ar=ar\n\
|
||||
bg=bg\n\
|
||||
|
|
Loading…
Add table
Reference in a new issue