فهرست منبع

fix #1660 add _query preference

Shinsuke Sugaya 7 سال پیش
والد
کامیت
25498b625a

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

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

+ 15 - 8
src/main/java/org/codelibs/fess/helper/QueryHelper.java

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

+ 6 - 6
src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java

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

+ 2 - 2
src/main/resources/fess_config.properties

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