fix #1623 add default preference
This commit is contained in:
parent
2a1f80a089
commit
d8b6a358a7
5 changed files with 70 additions and 26 deletions
|
@ -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;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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\
|
||||
|
|
Loading…
Add table
Reference in a new issue