diff --git a/src/main/java/org/codelibs/fess/app/service/SearchService.java b/src/main/java/org/codelibs/fess/app/service/SearchService.java index cb2fd6148..359401ba4 100644 --- a/src/main/java/org/codelibs/fess/app/service/SearchService.java +++ b/src/main/java/org/codelibs/fess/app/service/SearchService.java @@ -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; }); } diff --git a/src/main/java/org/codelibs/fess/helper/QueryHelper.java b/src/main/java/org/codelibs/fess/helper/QueryHelper.java index 214293800..6757e183e 100644 --- a/src/main/java/org/codelibs/fess/helper/QueryHelper.java +++ b/src/main/java/org/codelibs/fess/helper/QueryHelper.java @@ -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 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 */ diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java index a707302d0..ff94433c8 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java @@ -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'.
+ * The value is, e.g. _local
+ * @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'.
+ * The value is, e.g. _local
+ * @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'.
* 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"); diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java index 979718df8..002de37d2 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java @@ -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 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() { diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties index e4a8bceb0..c9526ab7b 100644 --- a/src/main/resources/fess_config.properties +++ b/src/main/resources/fess_config.properties @@ -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\