浏览代码

fix #1623 add default preference

Shinsuke Sugaya 7 年之前
父节点
当前提交
d8b6a358a7

+ 4 - 4
src/main/java/org/codelibs/fess/app/service/SearchService.java

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

+ 34 - 0
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.PostConstruct;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpSession;
 
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryparser.classic.ParseException;
 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.QueryContext;
 import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
 import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
 import org.codelibs.fess.exception.InvalidQueryException;
 import org.codelibs.fess.exception.InvalidQueryException;
+import org.codelibs.fess.mylasta.action.FessUserBean;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.ComponentUtil;
 import org.dbflute.optional.OptionalThing;
 import org.dbflute.optional.OptionalThing;
+import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.common.unit.Fuzziness;
 import org.elasticsearch.common.unit.Fuzziness;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
@@ -728,6 +731,37 @@ public class QueryHelper {
         return apiResponseFieldSet.contains(field);
         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
      * @return the responseFields
      */
      */

+ 30 - 0
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.  */
     /** The key of the configuration. e.g.  */
     String QUERY_DEFAULT_LANGUAGES = "query.default.languages";
     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
     /** The key of the configuration. e.g. ar=ar
     bg=bg
     bg=bg
     bn=bn
     bn=bn
@@ -3299,6 +3305,20 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
      */
      */
     Integer getQueryDefaultLanguagesAsInteger();
     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>
      * Get the value for the key 'query.language.mapping'. <br>
      * The value is, e.g. ar=ar
      * 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);
             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() {
         public String getQueryLanguageMapping() {
             return get(FessConfig.QUERY_LANGUAGE_MAPPING);
             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_SIZE, "0");
             defaultMap.put(FessConfig.QUERY_COLLAPSE_INNER_HITS_SORTS, "");
             defaultMap.put(FessConfig.QUERY_COLLAPSE_INNER_HITS_SORTS, "");
             defaultMap.put(FessConfig.QUERY_DEFAULT_LANGUAGES, "");
             defaultMap.put(FessConfig.QUERY_DEFAULT_LANGUAGES, "");
+            defaultMap.put(FessConfig.QUERY_JSON_DEFAULT_PREFERENCE, "_local");
+            defaultMap.put(FessConfig.QUERY_GSA_DEFAULT_PREFERENCE, "_local");
             defaultMap
             defaultMap
                     .put(FessConfig.QUERY_LANGUAGE_MAPPING,
                     .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");
                             "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");

+ 0 - 22
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.Attribute;
 import javax.naming.directory.BasicAttribute;
 import javax.naming.directory.BasicAttribute;
-import javax.servlet.http.HttpSession;
 
 
 import org.codelibs.core.exception.ClassNotFoundRuntimeException;
 import org.codelibs.core.exception.ClassNotFoundRuntimeException;
 import org.codelibs.core.lang.StringUtil;
 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.ComponentUtil;
 import org.codelibs.fess.util.PrunedTag;
 import org.codelibs.fess.util.PrunedTag;
 import org.dbflute.optional.OptionalThing;
 import org.dbflute.optional.OptionalThing;
-import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.search.sort.SortBuilder;
 import org.elasticsearch.search.sort.SortBuilder;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortOrder;
 import org.elasticsearch.search.sort.SortOrder;
 import org.lastaflute.job.LaJob;
 import org.lastaflute.job.LaJob;
 import org.lastaflute.job.subsidiary.JobConcurrentExec;
 import org.lastaflute.job.subsidiary.JobConcurrentExec;
-import org.lastaflute.web.util.LaRequestUtil;
 import org.lastaflute.web.validation.RequiredValidator;
 import org.lastaflute.web.validation.RequiredValidator;
 import org.lastaflute.web.validation.theme.typed.DoubleTypeValidator;
 import org.lastaflute.web.validation.theme.typed.DoubleTypeValidator;
 import org.lastaflute.web.validation.theme.typed.FloatTypeValidator;
 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)));
         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();
     String getRoleSearchDefaultPermissions();
 
 
     public default String[] getSearchDefaultPermissionsAsArray() {
     public default String[] getSearchDefaultPermissionsAsArray() {

+ 2 - 0
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.size=0
 query.collapse.inner.hits.sorts=
 query.collapse.inner.hits.sorts=
 query.default.languages=
 query.default.languages=
+query.json.default.preference=_local
+query.gsa.default.preference=_local
 query.language.mapping=\
 query.language.mapping=\
 ar=ar\n\
 ar=ar\n\
 bg=bg\n\
 bg=bg\n\