Shinsuke Sugaya 6 anni fa
parent
commit
5da01723e1

+ 2 - 0
src/main/java/org/codelibs/fess/Constants.java

@@ -398,6 +398,8 @@ public class Constants extends CoreLibConstants {
 
 
     public static final String MAPPING_TYPE_DOUBLE = "double";
     public static final String MAPPING_TYPE_DOUBLE = "double";
 
 
+    public static final String MAPPING_TYPE_DATE = "date";
+
     public static final String PAGING_QUERY_LIST = "pagingQueryList";
     public static final String PAGING_QUERY_LIST = "pagingQueryList";
 
 
     public static final String REQUEST_LANGUAGES = "requestLanguages";
     public static final String REQUEST_LANGUAGES = "requestLanguages";

+ 22 - 13
src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java

@@ -19,6 +19,7 @@ import static org.codelibs.core.stream.StreamUtil.stream;
 
 
 import java.io.InputStream;
 import java.io.InputStream;
 import java.net.URLDecoder;
 import java.net.URLDecoder;
+import java.time.temporal.TemporalAccessor;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -31,7 +32,7 @@ import org.apache.tika.metadata.HttpHeaders;
 import org.apache.tika.metadata.TikaMetadataKeys;
 import org.apache.tika.metadata.TikaMetadataKeys;
 import org.codelibs.core.io.SerializeUtil;
 import org.codelibs.core.io.SerializeUtil;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.core.lang.StringUtil;
-import org.codelibs.core.misc.Pair;
+import org.codelibs.core.misc.Tuple3;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.crawler.entity.AccessResultData;
 import org.codelibs.fess.crawler.entity.AccessResultData;
 import org.codelibs.fess.crawler.entity.ExtractData;
 import org.codelibs.fess.crawler.entity.ExtractData;
@@ -55,6 +56,7 @@ import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.helper.SystemHelper;
 import org.codelibs.fess.helper.SystemHelper;
 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.elasticsearch.common.joda.Joda;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
@@ -105,8 +107,10 @@ public abstract class AbstractFessFileTransformer extends AbstractTransformer im
                 getLogger().debug("ExtractData: " + extractData);
                 getLogger().debug("ExtractData: " + extractData);
             }
             }
             // meta
             // meta
-            extractData.getKeySet().stream()//
-                    .filter(k -> extractData.getValues(k) != null)//
+            extractData
+                    .getKeySet()
+                    .stream()
+                    .filter(k -> extractData.getValues(k) != null)
                     .forEach(key -> {
                     .forEach(key -> {
                         final String[] values = extractData.getValues(key);
                         final String[] values = extractData.getValues(key);
                         metaDataMap.put(key, values);
                         metaDataMap.put(key, values);
@@ -122,23 +126,28 @@ public abstract class AbstractFessFileTransformer extends AbstractTransformer im
                                 }
                                 }
                             }
                             }
 
 
-                            final Pair<String, String> mapping = fessConfig.getCrawlerMetadataNameMapping(key);
+                            final Tuple3<String, String, String> mapping = fessConfig.getCrawlerMetadataNameMapping(key);
                             if (mapping != null) {
                             if (mapping != null) {
-                                if (Constants.MAPPING_TYPE_ARRAY.equalsIgnoreCase(mapping.getSecond())) {
-                                    dataMap.put(mapping.getFirst(), values);
-                                } else if (Constants.MAPPING_TYPE_STRING.equalsIgnoreCase(mapping.getSecond())) {
+                                if (Constants.MAPPING_TYPE_ARRAY.equalsIgnoreCase(mapping.getValue2())) {
+                                    dataMap.put(mapping.getValue1(), values);
+                                } else if (Constants.MAPPING_TYPE_STRING.equalsIgnoreCase(mapping.getValue2())) {
                                     final String joinedValue = StringUtils.join(values, ' ');
                                     final String joinedValue = StringUtils.join(values, ' ');
-                                    dataMap.put(mapping.getFirst(), joinedValue.trim());
+                                    dataMap.put(mapping.getValue1(), joinedValue.trim());
                                 } else if (values.length == 1) {
                                 } else if (values.length == 1) {
                                     try {
                                     try {
-                                        if (Constants.MAPPING_TYPE_LONG.equalsIgnoreCase(mapping.getSecond())) {
-                                            dataMap.put(mapping.getFirst(), Long.parseLong(values[0]));
-                                        } else if (Constants.MAPPING_TYPE_DOUBLE.equalsIgnoreCase(mapping.getSecond())) {
-                                            dataMap.put(mapping.getFirst(), Double.parseDouble(values[0]));
+                                        if (Constants.MAPPING_TYPE_LONG.equalsIgnoreCase(mapping.getValue2())) {
+                                            dataMap.put(mapping.getValue1(), Long.parseLong(values[0]));
+                                        } else if (Constants.MAPPING_TYPE_DOUBLE.equalsIgnoreCase(mapping.getValue2())) {
+                                            dataMap.put(mapping.getValue1(), Double.parseDouble(values[0]));
+                                        } else if (Constants.MAPPING_TYPE_DATE.equalsIgnoreCase(mapping.getValue2())) {
+                                            final String format =
+                                                    StringUtil.isNotBlank(mapping.getValue3()) ? mapping.getValue3() : "date_optional_time";
+                                            final TemporalAccessor dt = Joda.forPattern(format).parse(mapping.getValue2());
+                                            dataMap.put(mapping.getValue1(), Joda.forPattern("date_optional_time").format(dt));
                                         } else {
                                         } else {
                                             logger.warn("Unknown mapping type: {}={}", key, mapping);
                                             logger.warn("Unknown mapping type: {}={}", key, mapping);
                                         }
                                         }
-                                    } catch (final NumberFormatException e) {
+                                    } catch (final Exception e) {
                                         logger.warn("Failed to parse " + values[0], e);
                                         logger.warn("Failed to parse " + values[0], e);
                                     }
                                     }
                                 }
                                 }

+ 11 - 7
src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java

@@ -48,6 +48,7 @@ import org.codelibs.core.exception.ClassNotFoundRuntimeException;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.core.misc.Pair;
 import org.codelibs.core.misc.Pair;
 import org.codelibs.core.misc.Tuple3;
 import org.codelibs.core.misc.Tuple3;
+import org.codelibs.core.misc.Tuple4;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.exception.FessSystemException;
 import org.codelibs.fess.exception.FessSystemException;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.helper.PermissionHelper;
@@ -890,22 +891,25 @@ public interface FessProp {
 
 
     String getCrawlerMetadataNameMapping();
     String getCrawlerMetadataNameMapping();
 
 
-    default Pair<String, String> getCrawlerMetadataNameMapping(final String name) {
+    default Tuple3<String, String, String> getCrawlerMetadataNameMapping(final String name) {
         @SuppressWarnings("unchecked")
         @SuppressWarnings("unchecked")
-        Map<String, Pair<String, String>> params = (Map<String, Pair<String, String>>) propMap.get(CRAWLER_METADATA_NAME_MAPPING);
+        Map<String, Tuple3<String, String, String>> params =
+                (Map<String, Tuple3<String, String, String>>) propMap.get(CRAWLER_METADATA_NAME_MAPPING);
         if (params == null) {
         if (params == null) {
             params = split(getCrawlerMetadataNameMapping(), "\n").get(stream -> stream.filter(StringUtil::isNotBlank).map(v -> {
             params = split(getCrawlerMetadataNameMapping(), "\n").get(stream -> stream.filter(StringUtil::isNotBlank).map(v -> {
                 final String[] values = v.split("=");
                 final String[] values = v.split("=");
                 if (values.length == 2) {
                 if (values.length == 2) {
-                    final String[] subValues = values[1].split(":");
-                    if (subValues.length == 2) {
-                        return new Tuple3<>(values[0], subValues[0], subValues[1]);
+                    final String[] subValues = values[1].split(":", 3);
+                    if (subValues.length == 3) {
+                        return new Tuple4<>(values[0], subValues[0], subValues[1], subValues[2]);
+                    } else if (subValues.length == 2) {
+                        return new Tuple4<>(values[0], subValues[0], subValues[1], StringUtil.EMPTY);
                     } else {
                     } else {
-                        return new Tuple3<>(values[0], values[1], Constants.MAPPING_TYPE_ARRAY);
+                        return new Tuple4<>(values[0], values[1], Constants.MAPPING_TYPE_ARRAY, StringUtil.EMPTY);
                     }
                     }
                 }
                 }
                 return null;
                 return null;
-            }).collect(Collectors.toMap(Tuple3::getValue1, d -> new Pair<>(d.getValue2(), d.getValue3()))));
+            }).collect(Collectors.toMap(Tuple4::getValue1, d -> new Tuple3<>(d.getValue2(), d.getValue3(), d.getValue4()))));
             propMap.put(CRAWLER_METADATA_NAME_MAPPING, params);
             propMap.put(CRAWLER_METADATA_NAME_MAPPING, params);
         }
         }
         return params.get(name);
         return params.get(name);