diff --git a/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java b/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java
index 73cc1ace56ccc459814eec8ee525920e1d9c2557..c85c6e03330d469c80a0fe8ab0f44d0771ae56ac 100644
--- a/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java
+++ b/src/main/java/org/codelibs/fess/ds/callback/IndexUpdateCallbackImpl.java
@@ -15,11 +15,14 @@
  */
 package org.codelibs.fess.ds.callback;
 
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 
 import javax.annotation.PostConstruct;
 
+import org.codelibs.core.stream.StreamUtil;
 import org.codelibs.fess.es.client.FessEsClient;
 import org.codelibs.fess.exception.DataStoreException;
 import org.codelibs.fess.helper.CrawlingInfoHelper;
@@ -82,6 +85,15 @@ public class IndexUpdateCallbackImpl implements IndexUpdateCallback {
             addFavoriteCountField(dataMap, url, fessConfig.getIndexFieldFavoriteCount());
         }
 
+        final Set<String> matchedLabelSet = ComponentUtil.getLabelTypeHelper().getMatchedLabelValueSet(url);
+        if (!matchedLabelSet.isEmpty()) {
+            final Set<String> newLabelSet = new HashSet<>();
+            final String[] oldLabels = DocumentUtil.getValue(dataMap, fessConfig.getIndexFieldLabel(), String[].class);
+            StreamUtil.stream(oldLabels).of(stream -> stream.forEach(newLabelSet::add));
+            matchedLabelSet.stream().forEach(newLabelSet::add);
+            dataMap.put(fessConfig.getIndexFieldLabel(), newLabelSet.toArray(new String[newLabelSet.size()]));
+        }
+
         if (!dataMap.containsKey(fessConfig.getIndexFieldDocId())) {
             final SystemHelper systemHelper = ComponentUtil.getSystemHelper();
             dataMap.put(fessConfig.getIndexFieldDocId(), systemHelper.generateDocId(dataMap));
diff --git a/src/main/java/org/codelibs/fess/util/DocumentUtil.java b/src/main/java/org/codelibs/fess/util/DocumentUtil.java
index 93047d578e163992da0e86103118e091490d67d7..2a9c25fb98ccbc082f900ef271d517965f98104d 100644
--- a/src/main/java/org/codelibs/fess/util/DocumentUtil.java
+++ b/src/main/java/org/codelibs/fess/util/DocumentUtil.java
@@ -17,6 +17,7 @@ package org.codelibs.fess.util;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +54,8 @@ public final class DocumentUtil {
         if (value instanceof List) {
             if (clazz.isAssignableFrom(List.class)) {
                 return (T) value;
+            } else if (clazz.isAssignableFrom(String[].class)) {
+                return (T) ((List<?>) value).stream().filter(s -> s != null).map(s -> s.toString()).toArray(n -> new String[n]);
             }
 
             if (((List<?>) value).isEmpty()) {
@@ -60,6 +63,22 @@ public final class DocumentUtil {
             }
 
             return convertObj(((List<?>) value).get(0), clazz);
+        } else if (value instanceof String[]) {
+            if (clazz.isAssignableFrom(String[].class)) {
+                return (T) value;
+            } else if (clazz.isAssignableFrom(List.class)) {
+                final List<String> list = new ArrayList<>();
+                for (final String s : (String[]) value) {
+                    list.add(s);
+                }
+                return (T) list;
+            }
+
+            if (((String[]) value).length == 0) {
+                return null;
+            }
+
+            return convertObj(((String[]) value)[0], clazz);
         }
 
         return convertObj(value, clazz);
diff --git a/src/test/java/org/codelibs/fess/util/DocumentUtilTest.java b/src/test/java/org/codelibs/fess/util/DocumentUtilTest.java
index a6cdf489288238ca5b3c9244e3879a6ee2b86930..93d163ab47bd76dee5f226ce3955ae50358e93d1 100644
--- a/src/test/java/org/codelibs/fess/util/DocumentUtilTest.java
+++ b/src/test/java/org/codelibs/fess/util/DocumentUtilTest.java
@@ -15,13 +15,17 @@
  */
 package org.codelibs.fess.util;
 
+import static org.junit.Assert.assertArrayEquals;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.codelibs.fess.unit.UnitFessTestCase;
+import org.junit.jupiter.api.Assertions;
 
 public class DocumentUtilTest extends UnitFessTestCase {
 
@@ -39,6 +43,20 @@ public class DocumentUtilTest extends UnitFessTestCase {
         assertNull(DocumentUtil.getValue(doc, "key2", String.class));
     }
 
+    public void test_strings() {
+        Map<String, Object> doc = new HashMap<>();
+        doc.put("key1", new String[] { "aaa", "bbb" });
+        assertArrayEquals(new String[] { "aaa", "bbb" }, DocumentUtil.getValue(doc, "key1", String[].class));
+        assertEquals(Arrays.asList("aaa", "bbb"), (List<String>) DocumentUtil.getValue(doc, "key1", List.class));
+    }
+
+    public void test_list() {
+        Map<String, Object> doc = new HashMap<>();
+        doc.put("key1", Arrays.asList("aaa", "bbb"));
+        assertArrayEquals(new String[] { "aaa", "bbb" }, DocumentUtil.getValue(doc, "key1", String[].class));
+        assertEquals(Arrays.asList("aaa", "bbb"), (List<String>) DocumentUtil.getValue(doc, "key1", List.class));
+    }
+
     public void test_integer() {
         Map<String, Object> doc = new HashMap<>();