فهرست منبع

fix #676 add filename

Shinsuke Sugaya 8 سال پیش
والد
کامیت
9d19836b1c

+ 5 - 0
src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java

@@ -257,6 +257,11 @@ public abstract class AbstractFessFileTransformer extends AbstractTransformer im
         putResultDataBody(dataMap, fessConfig.getIndexFieldHost(), getHostOnFile(url));
         // site
         putResultDataBody(dataMap, fessConfig.getIndexFieldSite(), getSiteOnFile(url, urlEncoding));
+        // filename
+        final String fileName = getFileName(url, urlEncoding);
+        if (StringUtil.isNotBlank(fileName)) {
+            putResultDataBody(dataMap, fessConfig.getIndexFieldFilename(), fileName);
+        }
         // url
         putResultDataBody(dataMap, fessConfig.getIndexFieldUrl(), url);
         // created

+ 33 - 0
src/main/java/org/codelibs/fess/crawler/transformer/FessTransformer.java

@@ -168,4 +168,37 @@ public interface FessTransformer {
         return getFessConfig().getCrawlerDocumentMaxSiteLengthAsInteger();
     }
 
+    public default String getFileName(final String url, final String encoding) {
+        if (StringUtil.isBlank(url)) {
+            return StringUtil.EMPTY;
+        }
+
+        String u = url;
+
+        int idx = u.lastIndexOf('?');
+        if (idx >= 0) {
+            u = u.substring(0, idx);
+        }
+
+        idx = u.lastIndexOf('#');
+        if (idx >= 0) {
+            u = u.substring(0, idx);
+        }
+
+        idx = u.lastIndexOf('/');
+        if (idx >= 0) {
+            if (u.length() > idx + 1) {
+                u = u.substring(idx + 1);
+            } else {
+                u = StringUtil.EMPTY;
+            }
+        }
+
+        try {
+            u = URLDecoder.decode(u, encoding);
+        } catch (final Exception e) {
+            // ignore
+        }
+        return u;
+    }
 }

+ 5 - 0
src/main/java/org/codelibs/fess/crawler/transformer/FessXpathTransformer.java

@@ -250,6 +250,11 @@ public class FessXpathTransformer extends XpathTransformer implements FessTransf
         putResultDataBody(dataMap, fessConfig.getIndexFieldHost(), getHost(url));
         // site
         putResultDataBody(dataMap, fessConfig.getIndexFieldSite(), getSite(url, urlEncoding));
+        // filename
+        String fileName = getFileName(url, urlEncoding);
+        if (StringUtil.isNotBlank(fileName)) {
+            putResultDataBody(dataMap, fessConfig.getIndexFieldFilename(), fileName);
+        }
         // url
         putResultDataBody(dataMap, fessConfig.getIndexFieldUrl(), url);
         // created

+ 6 - 0
src/main/java/org/codelibs/fess/helper/QueryHelper.java

@@ -149,6 +149,7 @@ public class QueryHelper {
                     fessConfig.getIndexFieldTimestamp(), //
                     fessConfig.getIndexFieldMimetype(), //
                     fessConfig.getIndexFieldFiletype(), //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldCreated(), //
                     fessConfig.getIndexFieldTitle(), //
                     fessConfig.getIndexFieldDigest(), //
@@ -171,6 +172,7 @@ public class QueryHelper {
                     fessConfig.getIndexFieldTimestamp(), //
                     fessConfig.getIndexFieldMimetype(), //
                     fessConfig.getIndexFieldFiletype(), //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldCreated(), //
                     fessConfig.getIndexFieldTitle(), //
                     fessConfig.getIndexFieldDigest(), //
@@ -201,6 +203,7 @@ public class QueryHelper {
                     fessConfig.getIndexFieldTimestamp(), //
                     fessConfig.getIndexFieldMimetype(), //
                     fessConfig.getIndexFieldFiletype(), //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldLabel(), //
                     fessConfig.getIndexFieldSegment(), //
                     fessConfig.getIndexFieldClickCount(), //
@@ -223,6 +226,7 @@ public class QueryHelper {
         }
         if (supportedSortFields == null) {
             supportedSortFields = new String[] { SCORE_SORT_VALUE, //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldCreated(), //
                     fessConfig.getIndexFieldContentLength(), //
                     fessConfig.getIndexFieldLastModified(), //
@@ -246,6 +250,7 @@ public class QueryHelper {
                     fessConfig.getIndexFieldTimestamp(), //
                     fessConfig.getIndexFieldMimetype(), //
                     fessConfig.getIndexFieldFiletype(), //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldCreated(), //
                     fessConfig.getIndexFieldTitle(), //
                     fessConfig.getIndexFieldDigest(), //
@@ -263,6 +268,7 @@ public class QueryHelper {
                     fessConfig.getIndexFieldExpires(), //
                     fessConfig.getIndexFieldFavoriteCount(), //
                     fessConfig.getIndexFieldFiletype(), //
+                    fessConfig.getIndexFieldFilename(), //
                     fessConfig.getIndexFieldHasCache(), //
                     fessConfig.getIndexFieldHost(), //
                     fessConfig.getIndexFieldId(), //

+ 6 - 5
src/main/java/org/codelibs/fess/helper/ViewHelper.java

@@ -148,11 +148,12 @@ public class ViewHelper {
     public String getContentTitle(final Map<String, Object> document) {
         final int size = titleLength;
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        String title;
-        if (StringUtil.isNotBlank(DocumentUtil.getValue(document, fessConfig.getIndexFieldTitle(), String.class))) {
-            title = DocumentUtil.getValue(document, fessConfig.getIndexFieldTitle(), String.class);
-        } else {
-            title = DocumentUtil.getValue(document, fessConfig.getIndexFieldUrl(), String.class);
+        String title = DocumentUtil.getValue(document, fessConfig.getIndexFieldTitle(), String.class);
+        if (StringUtil.isBlank(title)) {
+            title = DocumentUtil.getValue(document, fessConfig.getIndexFieldFilename(), String.class);
+            if (StringUtil.isBlank(title)) {
+                title = DocumentUtil.getValue(document, fessConfig.getIndexFieldUrl(), String.class);
+            }
         }
         return StringUtils.abbreviate(title, size);
     }

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

@@ -336,6 +336,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
     /** The key of the configuration. e.g. filetype */
     String INDEX_FIELD_FILETYPE = "index.field.filetype";
 
+    /** The key of the configuration. e.g. filename */
+    String INDEX_FIELD_FILENAME = "index.field.filename";
+
     /** The key of the configuration. e.g. content_title */
     String RESPONSE_FIELD_content_title = "response.field.content_title";
 
@@ -1979,6 +1982,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
      */
     String getIndexFieldFiletype();
 
+    /**
+     * Get the value for the key 'index.field.filename'. <br>
+     * The value is, e.g. filename <br>
+     * @return The value of found property. (NotNull: if not found, exception but basically no way)
+     */
+    String getIndexFieldFilename();
+
     /**
      * Get the value for the key 'response.field.content_title'. <br>
      * The value is, e.g. content_title <br>
@@ -4644,6 +4654,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
             return get(FessConfig.INDEX_FIELD_FILETYPE);
         }
 
+        public String getIndexFieldFilename() {
+            return get(FessConfig.INDEX_FIELD_FILENAME);
+        }
+
         public String getResponseFieldContentTitle() {
             return get(FessConfig.RESPONSE_FIELD_content_title);
         }

+ 1 - 0
src/main/resources/fess_config.properties

@@ -162,6 +162,7 @@ index.field.host=host
 index.field.site=site
 index.field.content_length=content_length
 index.field.filetype=filetype
+index.field.filename=filename
 response.field.content_title=content_title
 response.field.content_description=content_description
 response.field.url_link=url_link

+ 4 - 0
src/main/resources/fess_indices/fess/doc.json

@@ -477,6 +477,10 @@
       "favorite_count": {
         "type": "long"
       },
+      "filename": {
+        "type": "string",
+        "index": "not_analyzed"
+      },
       "filetype": {
         "type": "string",
         "index": "not_analyzed"

+ 7 - 0
src/main/webapp/WEB-INF/view/admin/searchlist/admin_searchlist_edit.jsp

@@ -154,6 +154,13 @@
 											<la:text property="doc.filetype" styleClass="form-control" />
 										</div>
 									</div>
+									<div class="form-group">
+										<label for="filename" class="col-sm-3 control-label">filename</label>
+										<div class="col-sm-9">
+											<la:errors property="doc.filename" />
+											<la:text property="doc.filename" styleClass="form-control" />
+										</div>
+									</div>
 									<div class="form-group">
 										<label for="content" class="col-sm-3 control-label">content</label>
 										<div class="col-sm-9">