diff --git a/src/main/java/org/codelibs/fess/helper/ViewHelper.java b/src/main/java/org/codelibs/fess/helper/ViewHelper.java index 2761a917f..1c7f1fdee 100644 --- a/src/main/java/org/codelibs/fess/helper/ViewHelper.java +++ b/src/main/java/org/codelibs/fess/helper/ViewHelper.java @@ -15,6 +15,8 @@ */ package org.codelibs.fess.helper; +import static org.codelibs.core.stream.StreamUtil.split; + import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; @@ -149,7 +151,7 @@ public class ViewHelper { highlightTagPre = fessConfig.getQueryHighlightTagPre(); highlightTagPost = fessConfig.getQueryHighlightTagPost(); highlightedFields = fessConfig.getQueryHighlightContentDescriptionFieldsAsArray(); - for (int v : fessConfig.getQueryHighlightTerminalCharsAsArray()) { + for (final int v : fessConfig.getQueryHighlightTerminalCharsAsArray()) { highlightTerminalCharSet.add(v); } try { @@ -159,6 +161,26 @@ public class ViewHelper { } catch (final Throwable t) { logger.warn("Failed to set SessionTrackingMode.", t); } + + split(fessConfig.getQueryFacetQueries(), "\n").of(stream -> stream.map(String::trim).filter(StringUtil::isNotEmpty).forEach(s -> { + final String[] values = StringUtils.split(s, ":", 2); + if (values.length != 2) { + return; + } + final FacetQueryView facetQueryView = new FacetQueryView(); + facetQueryView.setTitle(values[0]); + split(values[1], "\t").of(subStream -> subStream.map(String::trim).filter(StringUtil::isNotEmpty).forEach(v -> { + final String[] facet = StringUtils.split(v, "=", 2); + if (facet.length == 2) { + facetQueryView.addQuery(facet[0], facet[1]); + } + })); + facetQueryView.init(); + facetQueryViewList.add(facetQueryView); + if (logger.isDebugEnabled()) { + logger.debug("loaded {}", facetQueryView); + } + })); } public String getContentTitle(final Map document) { diff --git a/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java b/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java index 763522b8e..7c86a99d3 100644 --- a/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java +++ b/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java @@ -861,7 +861,7 @@ public class FessLabels extends UserMessages { public static final String LABELS_facet_filetype_aif = "{labels.facet_filetype_aif}"; /** The key of the message: MIDI Audio */ - public static final String LABELS_facet_filetype_mid = "{labels.facet_filetype_mid}"; + public static final String LABELS_facet_filetype_midi = "{labels.facet_filetype_midi}"; /** The key of the message: MPGA Audio */ public static final String LABELS_facet_filetype_mpga = "{labels.facet_filetype_mpga}"; diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java index 2beda71e5..82bf9ab13 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java @@ -914,6 +914,12 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction /** The key of the configuration. e.g. 0.5 */ String QUERY_BOOST_CONTENT_LANG = "query.boost.content.lang"; + /** The key of the configuration. e.g. labels.facet_timestamp_title:labels.facet_timestamp_1day=timestamp:[now/d-1d TO *] labels.facet_timestamp_1week=timestamp:[now/d-7d TO *] labels.facet_timestamp_1month=timestamp:[now/d-1M TO *] labels.facet_timestamp_1year=timestamp:[now/d-1y TO *] + labels.facet_contentLength_title:labels.facet_contentLength_10k=content_length:[0 TO 9999] labels.facet_contentLength_10kto100k=content_length:[10000 TO 99999] labels.facet_contentLength_100kto500k=content_length:[100000 TO 499999] labels.facet_contentLength_500kto1m=content_length:[500000 TO 999999] labels.facet_contentLength_1m=content_length:[1000000 TO *] + labels.facet_filetype_title:labels.facet_filetype_html=filetype:html labels.facet_filetype_word=filetype:word labels.facet_filetype_excel=filetype:excel labels.facet_filetype_powerpoint=filetype:powerpoint labels.facet_filetype_odt=filetype:odt labels.facet_filetype_ods=filetype:ods labels.facet_filetype_odp=filetype:odp labels.facet_filetype_pdf=filetype:pdf labels.facet_filetype_txt=filetype:txt labels.facet_filetype_others=filetype:others + */ + String QUERY_FACET_QUERIES = "query.facet.queries"; + /** The key of the configuration. e.g. true */ String SMB_ROLE_FROM_FILE = "smb.role.from.file"; @@ -4140,6 +4146,17 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction */ java.math.BigDecimal getQueryBoostContentLangAsDecimal(); + /** + * Get the value for the key 'query.facet.queries'.
+ * The value is, e.g. labels.facet_timestamp_title:labels.facet_timestamp_1day=timestamp:[now/d-1d TO *] labels.facet_timestamp_1week=timestamp:[now/d-7d TO *] labels.facet_timestamp_1month=timestamp:[now/d-1M TO *] labels.facet_timestamp_1year=timestamp:[now/d-1y TO *] + labels.facet_contentLength_title:labels.facet_contentLength_10k=content_length:[0 TO 9999] labels.facet_contentLength_10kto100k=content_length:[10000 TO 99999] labels.facet_contentLength_100kto500k=content_length:[100000 TO 499999] labels.facet_contentLength_500kto1m=content_length:[500000 TO 999999] labels.facet_contentLength_1m=content_length:[1000000 TO *] + labels.facet_filetype_title:labels.facet_filetype_html=filetype:html labels.facet_filetype_word=filetype:word labels.facet_filetype_excel=filetype:excel labels.facet_filetype_powerpoint=filetype:powerpoint labels.facet_filetype_odt=filetype:odt labels.facet_filetype_ods=filetype:ods labels.facet_filetype_odp=filetype:odp labels.facet_filetype_pdf=filetype:pdf labels.facet_filetype_txt=filetype:txt labels.facet_filetype_others=filetype:others +
+ * comment: facet + * @return The value of found property. (NotNull: if not found, exception but basically no way) + */ + String getQueryFacetQueries(); + /** * Get the value for the key 'smb.role.from.file'.
* The value is, e.g. true
@@ -7559,6 +7576,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction return getAsDecimal(FessConfig.QUERY_BOOST_CONTENT_LANG); } + public String getQueryFacetQueries() { + return get(FessConfig.QUERY_FACET_QUERIES); + } + public String getSmbRoleFromFile() { return get(FessConfig.SMB_ROLE_FROM_FILE); } @@ -8954,6 +8975,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction defaultMap.put(FessConfig.QUERY_BOOST_TITLE_LANG, "1.0"); defaultMap.put(FessConfig.QUERY_BOOST_CONTENT, "0.005"); defaultMap.put(FessConfig.QUERY_BOOST_CONTENT_LANG, "0.5"); + defaultMap + .put(FessConfig.QUERY_FACET_QUERIES, + "labels.facet_timestamp_title:labels.facet_timestamp_1day=timestamp:[now/d-1d TO *]\tlabels.facet_timestamp_1week=timestamp:[now/d-7d TO *]\tlabels.facet_timestamp_1month=timestamp:[now/d-1M TO *]\tlabels.facet_timestamp_1year=timestamp:[now/d-1y TO *]\nlabels.facet_contentLength_title:labels.facet_contentLength_10k=content_length:[0 TO 9999]\tlabels.facet_contentLength_10kto100k=content_length:[10000 TO 99999]\tlabels.facet_contentLength_100kto500k=content_length:[100000 TO 499999]\tlabels.facet_contentLength_500kto1m=content_length:[500000 TO 999999]\tlabels.facet_contentLength_1m=content_length:[1000000 TO *]\nlabels.facet_filetype_title:labels.facet_filetype_html=filetype:html\tlabels.facet_filetype_word=filetype:word\tlabels.facet_filetype_excel=filetype:excel\tlabels.facet_filetype_powerpoint=filetype:powerpoint\tlabels.facet_filetype_odt=filetype:odt\tlabels.facet_filetype_ods=filetype:ods\tlabels.facet_filetype_odp=filetype:odp\tlabels.facet_filetype_pdf=filetype:pdf\tlabels.facet_filetype_txt=filetype:txt\tlabels.facet_filetype_others=filetype:others\n"); defaultMap.put(FessConfig.SMB_ROLE_FROM_FILE, "true"); defaultMap.put(FessConfig.SMB_AVAILABLE_SID_TYPES, "1,2,4:2"); defaultMap.put(FessConfig.FILE_ROLE_FROM_FILE, "true"); diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml index ce017ef6a..f66b20d0f 100644 --- a/src/main/resources/app.xml +++ b/src/main/resources/app.xml @@ -81,103 +81,6 @@ - - - - "labels.facet_timestamp_title" - - "labels.facet_timestamp_1day" - "timestamp:[now/d-1d TO *]" - - - "labels.facet_timestamp_1week" - "timestamp:[now/d-7d TO *]" - - - "labels.facet_timestamp_1month" - "timestamp:[now/d-1M TO *]" - - - "labels.facet_timestamp_1year" - "timestamp:[now/d-1y TO *]" - - - - - - - - "labels.facet_contentLength_title" - - "labels.facet_contentLength_10k" - "content_length:[0 TO 9999]" - - - "labels.facet_contentLength_10kto100k" - "content_length:[10000 TO 99999]" - - - "labels.facet_contentLength_100kto500k" - "content_length:[100000 TO 499999]" - - - "labels.facet_contentLength_500kto1m" - "content_length:[500000 TO 999999]" - - - "labels.facet_contentLength_1m" - "content_length:[1000000 TO *]" - - - - - - - - "labels.facet_filetype_title" - - "labels.facet_filetype_html" - "filetype:html" - - - "labels.facet_filetype_word" - "filetype:word" - - - "labels.facet_filetype_excel" - "filetype:excel" - - - "labels.facet_filetype_powerpoint" - "filetype:powerpoint" - - - "labels.facet_filetype_odt" - "filetype:odt" - - - "labels.facet_filetype_ods" - "filetype:ods" - - - "labels.facet_filetype_odp" - "filetype:odp" - - - "labels.facet_filetype_pdf" - "filetype:pdf" - - - "labels.facet_filetype_txt" - "filetype:txt" - - - "labels.facet_filetype_others" - "filetype:others" - - - - "application/pdf" diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties index 712bc84ee..c7a394c99 100644 --- a/src/main/resources/fess_config.properties +++ b/src/main/resources/fess_config.properties @@ -499,6 +499,31 @@ query.boost.title.lang=1.0 query.boost.content=0.005 query.boost.content.lang=0.5 +# facet +query.facet.queries=\ +labels.facet_timestamp_title:\ +labels.facet_timestamp_1day=timestamp:[now/d-1d TO *]\t\ +labels.facet_timestamp_1week=timestamp:[now/d-7d TO *]\t\ +labels.facet_timestamp_1month=timestamp:[now/d-1M TO *]\t\ +labels.facet_timestamp_1year=timestamp:[now/d-1y TO *]\n\ +labels.facet_contentLength_title:\ +labels.facet_contentLength_10k=content_length:[0 TO 9999]\t\ +labels.facet_contentLength_10kto100k=content_length:[10000 TO 99999]\t\ +labels.facet_contentLength_100kto500k=content_length:[100000 TO 499999]\t\ +labels.facet_contentLength_500kto1m=content_length:[500000 TO 999999]\t\ +labels.facet_contentLength_1m=content_length:[1000000 TO *]\n\ +labels.facet_filetype_title:\ +labels.facet_filetype_html=filetype:html\t\ +labels.facet_filetype_word=filetype:word\t\ +labels.facet_filetype_excel=filetype:excel\t\ +labels.facet_filetype_powerpoint=filetype:powerpoint\t\ +labels.facet_filetype_odt=filetype:odt\t\ +labels.facet_filetype_ods=filetype:ods\t\ +labels.facet_filetype_odp=filetype:odp\t\ +labels.facet_filetype_pdf=filetype:pdf\t\ +labels.facet_filetype_txt=filetype:txt\t\ +labels.facet_filetype_others=filetype:others\n\ + # acl smb.role.from.file=true smb.available.sid.types=1,2,4:2 diff --git a/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java b/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java index a408bc5f3..a275ec1ed 100644 --- a/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java +++ b/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java @@ -19,11 +19,13 @@ import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import org.codelibs.core.io.FileUtil; import org.codelibs.core.misc.DynamicProperties; +import org.codelibs.fess.entity.FacetQueryView; import org.codelibs.fess.es.config.exentity.PathMapping; import org.codelibs.fess.mylasta.direction.FessConfig; import org.codelibs.fess.unit.UnitFessTestCase; @@ -52,6 +54,8 @@ public class ViewHelperTest extends UnitFessTestCase { pathMappingHelper = new PathMappingHelper(); pathMappingHelper.init(); ComponentUtil.register(pathMappingHelper, "pathMappingHelper"); + FileTypeHelper fileTypeHelper = new FileTypeHelper(); + ComponentUtil.register(fileTypeHelper, "fileTypeHelper"); viewHelper = new ViewHelper(); viewHelper.init(); } @@ -62,6 +66,20 @@ public class ViewHelperTest extends UnitFessTestCase { super.tearDown(); } + public void test_facetQueries() { + final List list = viewHelper.getFacetQueryViewList(); + assertEquals(3, list.size()); + FacetQueryView view1 = list.get(0); + assertEquals("labels.facet_timestamp_title", view1.getTitle()); + assertEquals(4, view1.getQueryMap().size()); + FacetQueryView view2 = list.get(1); + assertEquals("labels.facet_contentLength_title", view2.getTitle()); + assertEquals(5, view2.getQueryMap().size()); + FacetQueryView view3 = list.get(2); + assertEquals("labels.facet_filetype_title", view3.getTitle()); + assertEquals(10, view3.getQueryMap().size()); + } + public void test_getUrlLink() throws IOException { ComponentUtil.setFessConfig(new FessConfig.SimpleImpl() { private static final long serialVersionUID = 1L;