浏览代码

fix #2495 ignore invalid query in keymatch

Shinsuke Sugaya 4 年之前
父节点
当前提交
42935874a8
共有 1 个文件被更改,包括 34 次插入30 次删除
  1. 34 30
      src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java

+ 34 - 30
src/main/java/org/codelibs/fess/helper/KeyMatchHelper.java

@@ -75,40 +75,44 @@ public class KeyMatchHelper {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
         final Map<String, Map<String, Pair<QueryBuilder, ScoreFunctionBuilder<?>>>> keyMatchQueryMap = new HashMap<>();
         getAvailableKeyMatchList().stream().forEach(keyMatch -> {
-            final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
-            if (logger.isDebugEnabled()) {
-                logger.debug("Loading KeyMatch Query: {}, Size: {}", keyMatch.getQuery(), keyMatch.getMaxSize());
-            }
-            getDocumentList(keyMatch).stream().map(doc -> {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Loaded KeyMatch doc: {}", doc);
-                }
-                return DocumentUtil.getValue(doc, fessConfig.getIndexFieldDocId(), String.class);
-            }).forEach(docId -> {
-                boolQuery.should(QueryBuilders.termQuery(fessConfig.getIndexFieldDocId(), docId));
-            });
-
-            if (boolQuery.hasClauses()) {
+            try {
+                final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
                 if (logger.isDebugEnabled()) {
-                    logger.debug("Loaded KeyMatch Boost Query: {}", boolQuery);
+                    logger.debug("Loading KeyMatch Query: {}, Size: {}", keyMatch.getQuery(), keyMatch.getMaxSize());
                 }
-                String virtualHost = keyMatch.getVirtualHost();
-                if (StringUtil.isBlank(virtualHost)) {
-                    virtualHost = StringUtil.EMPTY;
+                getDocumentList(keyMatch).stream().map(doc -> {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("Loaded KeyMatch doc: {}", doc);
+                    }
+                    return DocumentUtil.getValue(doc, fessConfig.getIndexFieldDocId(), String.class);
+                }).forEach(docId -> {
+                    boolQuery.should(QueryBuilders.termQuery(fessConfig.getIndexFieldDocId(), docId));
+                });
+
+                if (boolQuery.hasClauses()) {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("Loaded KeyMatch Boost Query: {}", boolQuery);
+                    }
+                    String virtualHost = keyMatch.getVirtualHost();
+                    if (StringUtil.isBlank(virtualHost)) {
+                        virtualHost = StringUtil.EMPTY;
+                    }
+                    Map<String, Pair<QueryBuilder, ScoreFunctionBuilder<?>>> queryMap = keyMatchQueryMap.get(virtualHost);
+                    if (queryMap == null) {
+                        queryMap = new HashMap<>();
+                        keyMatchQueryMap.put(virtualHost, queryMap);
+                    }
+                    queryMap.put(toLowerCase(keyMatch.getTerm()),
+                            new Pair<>(boolQuery, ScoreFunctionBuilders.weightFactorFunction(keyMatch.getBoost())));
+                } else if (logger.isDebugEnabled()) {
+                    logger.debug("No KeyMatch boost docs");
                 }
-                Map<String, Pair<QueryBuilder, ScoreFunctionBuilder<?>>> queryMap = keyMatchQueryMap.get(virtualHost);
-                if (queryMap == null) {
-                    queryMap = new HashMap<>();
-                    keyMatchQueryMap.put(virtualHost, queryMap);
-                }
-                queryMap.put(toLowerCase(keyMatch.getTerm()),
-                        new Pair<>(boolQuery, ScoreFunctionBuilders.weightFactorFunction(keyMatch.getBoost())));
-            } else if (logger.isDebugEnabled()) {
-                logger.debug("No KeyMatch boost docs");
-            }
 
-            if (interval > 0) {
-                ThreadUtil.sleep(interval);
+                if (interval > 0) {
+                    ThreadUtil.sleep(interval);
+                }
+            } catch (final Exception e) {
+                logger.warn("Cannot load {}", keyMatch, e);
             }
         });
         this.keyMatchQueryMap = keyMatchQueryMap;