fix #1660 add _query preference

This commit is contained in:
Shinsuke Sugaya 2018-05-20 12:25:10 +09:00
parent 60da70ca83
commit 25498b625a
4 changed files with 42 additions and 29 deletions

View file

@ -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;
});
}

View file

@ -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;

View file

@ -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");

View file

@ -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\