fix #1623 add default preference

This commit is contained in:
Shinsuke Sugaya 2018-04-25 06:10:23 +09:00
parent 2a1f80a089
commit d8b6a358a7
5 changed files with 70 additions and 26 deletions

View file

@ -107,7 +107,7 @@ public class SearchService {
fessConfig.getIndexDocumentSearchIndex(),
fessConfig.getIndexDocumentType(),
searchRequestBuilder -> {
fessConfig.processSearchPreference(searchRequestBuilder, userBean);
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())
@ -192,7 +192,7 @@ public class SearchService {
fessConfig.getIndexDocumentSearchIndex(),
fessConfig.getIndexDocumentType(),
searchRequestBuilder -> {
fessConfig.processSearchPreference(searchRequestBuilder, userBean);
queryHelper.processSearchPreference(searchRequestBuilder, userBean);
return SearchConditionBuilder.builder(searchRequestBuilder)
.query(StringUtil.isBlank(sortField) ? query : query + " sort:" + sortField).size(pageSize)
.responseFields(queryHelper.getScrollResponseFields()).searchRequestType(params.getType()).build();
@ -287,7 +287,7 @@ public class SearchService {
}
builder.setQuery(boolQuery);
builder.setFetchSource(fields, null);
fessConfig.processSearchPreference(builder, userBean);
queryHelper.processSearchPreference(builder, userBean);
return true;
});
@ -314,7 +314,7 @@ public class SearchService {
builder.setQuery(boolQuery);
builder.setSize(fessConfig.getPagingSearchPageMaxSizeAsInteger().intValue());
builder.setFetchSource(fields, null);
fessConfig.processSearchPreference(builder, userBean);
queryHelper.processSearchPreference(builder, userBean);
return true;
});
}

View file

@ -32,6 +32,7 @@ import java.util.stream.Stream;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
@ -55,9 +56,11 @@ import org.codelibs.fess.entity.GeoInfo;
import org.codelibs.fess.entity.QueryContext;
import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
import org.codelibs.fess.exception.InvalidQueryException;
import org.codelibs.fess.mylasta.action.FessUserBean;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.util.ComponentUtil;
import org.dbflute.optional.OptionalThing;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
@ -728,6 +731,37 @@ public class QueryHelper {
return apiResponseFieldSet.contains(field);
}
public void processSearchPreference(final SearchRequestBuilder searchRequestBuilder, final OptionalThing<FessUserBean> userBean) {
userBean.map(user -> {
if (user.hasRoles(fessConfig.getAuthenticationAdminRolesAsArray())) {
return Constants.SEARCH_PREFERENCE_LOCAL;
}
return user.getUserId();
}).ifPresent(p -> searchRequestBuilder.setPreference(p)).orElse(() -> LaRequestUtil.getOptionalRequest().map(r -> {
final HttpSession session = r.getSession(false);
if (session != null) {
return session.getId();
}
final String preference = r.getParameter("preference");
if (preference != null) {
return Integer.toString(preference.hashCode());
}
final Object accessType = r.getAttribute(Constants.SEARCH_LOG_ACCESS_TYPE);
if (Constants.SEARCH_LOG_ACCESS_TYPE_JSON.equals(accessType)) {
final String pref = fessConfig.getQueryJsonDefaultPreference();
if (StringUtil.isNotBlank(pref)) {
return pref;
}
} else if (Constants.SEARCH_LOG_ACCESS_TYPE_XML.equals(accessType)) {
final String pref = fessConfig.getQueryGsaDefaultPreference();
if (StringUtil.isNotBlank(pref)) {
return pref;
}
}
return null;
}).ifPresent(p -> searchRequestBuilder.setPreference(p)));
}
/**
* @return the responseFields
*/

View file

@ -638,6 +638,12 @@ 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 */
String QUERY_JSON_DEFAULT_PREFERENCE = "query.json.default.preference";
/** The key of the configuration. e.g. _local */
String QUERY_GSA_DEFAULT_PREFERENCE = "query.gsa.default.preference";
/** The key of the configuration. e.g. ar=ar
bg=bg
bn=bn
@ -3299,6 +3305,20 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
Integer getQueryDefaultLanguagesAsInteger();
/**
* Get the value for the key 'query.json.default.preference'. <br>
* The value is, e.g. _local <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>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryGsaDefaultPreference();
/**
* Get the value for the key 'query.language.mapping'. <br>
* The value is, e.g. ar=ar
@ -6745,6 +6765,14 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return getAsInteger(FessConfig.QUERY_DEFAULT_LANGUAGES);
}
public String getQueryJsonDefaultPreference() {
return get(FessConfig.QUERY_JSON_DEFAULT_PREFERENCE);
}
public String getQueryGsaDefaultPreference() {
return get(FessConfig.QUERY_GSA_DEFAULT_PREFERENCE);
}
public String getQueryLanguageMapping() {
return get(FessConfig.QUERY_LANGUAGE_MAPPING);
}
@ -8232,6 +8260,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_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

@ -43,7 +43,6 @@ import java.util.stream.Stream;
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttribute;
import javax.servlet.http.HttpSession;
import org.codelibs.core.exception.ClassNotFoundRuntimeException;
import org.codelibs.core.lang.StringUtil;
@ -57,13 +56,11 @@ import org.codelibs.fess.taglib.FessFunctions;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.PrunedTag;
import org.dbflute.optional.OptionalThing;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.lastaflute.job.LaJob;
import org.lastaflute.job.subsidiary.JobConcurrentExec;
import org.lastaflute.web.util.LaRequestUtil;
import org.lastaflute.web.validation.RequiredValidator;
import org.lastaflute.web.validation.theme.typed.DoubleTypeValidator;
import org.lastaflute.web.validation.theme.typed.FloatTypeValidator;
@ -1078,25 +1075,6 @@ public interface FessProp {
return stream(getCrawlerFileProtocolsAsArray()).get(stream -> stream.anyMatch(s -> url.startsWith(s)));
}
public default void processSearchPreference(final SearchRequestBuilder searchRequestBuilder, final OptionalThing<FessUserBean> userBean) {
userBean.map(user -> {
if (user.hasRoles(getAuthenticationAdminRolesAsArray())) {
return Constants.SEARCH_PREFERENCE_LOCAL;
}
return user.getUserId();
}).ifPresent(p -> searchRequestBuilder.setPreference(p)).orElse(() -> LaRequestUtil.getOptionalRequest().map(r -> {
final HttpSession session = r.getSession(false);
if (session != null) {
return session.getId();
}
final String preference = r.getParameter("preference");
if (preference != null) {
return Integer.toString(preference.hashCode());
}
return null;
}).ifPresent(p -> searchRequestBuilder.setPreference(p)));
}
String getRoleSearchDefaultPermissions();
public default String[] getSearchDefaultPermissionsAsArray() {

View file

@ -309,6 +309,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.language.mapping=\
ar=ar\n\
bg=bg\n\