diff --git a/src/main/java/org/codelibs/fess/Constants.java b/src/main/java/org/codelibs/fess/Constants.java index 69e3906c9..5e9edc682 100644 --- a/src/main/java/org/codelibs/fess/Constants.java +++ b/src/main/java/org/codelibs/fess/Constants.java @@ -366,4 +366,6 @@ public class Constants extends CoreLibConstants { public static final String MAPPING_TYPE_LONG = "long"; public static final String MAPPING_TYPE_DOUBLE = "double"; + + public static final String PAGING_QUERY_LIST = "pagingQueryList"; } diff --git a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java index a3ab9630b..5178a5075 100644 --- a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java +++ b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java @@ -136,7 +136,7 @@ public class SearchAction extends FessSearchAction { } } RenderDataUtil.register(data, "displayQuery", getDisplayQuery(form, labelTypeHelper.getLabelTypeItemList())); - RenderDataUtil.register(data, "pagingQuery", getPagingQuery(form)); + createPagingQuery(form); }); } catch (final InvalidQueryException e) { if (logger.isDebugEnabled()) { @@ -206,14 +206,14 @@ public class SearchAction extends FessSearchAction { return buf.toString(); } - protected String getPagingQuery(final SearchForm form) { - final StringBuilder buf = new StringBuilder(200); + protected void createPagingQuery(final SearchForm form) { + final List pagingQueryList = new ArrayList<>(); if (form.ex_q != null) { StreamUtil.of(form.ex_q).filter(q -> StringUtil.isNotBlank(q)).distinct() - .forEach(q -> buf.append("&ex_q=").append(LaFunctions.u(q))); + .forEach(q -> pagingQueryList.add("ex_q=" + LaFunctions.u(q))); } if (StringUtil.isNotBlank(form.sort)) { - buf.append("&sort=").append(LaFunctions.u(form.sort)); + pagingQueryList.add("sort=" + LaFunctions.u(form.sort)); } if (form.lang != null) { final Set langSet = new HashSet(); @@ -231,7 +231,7 @@ public class SearchAction extends FessSearchAction { } if (!langSet.isEmpty()) { for (final String lang : langSet) { - buf.append("&lang=").append(LaFunctions.u(lang)); + pagingQueryList.add("&lang=" + LaFunctions.u(lang)); } } } @@ -241,14 +241,13 @@ public class SearchAction extends FessSearchAction { if (values != null) { for (final String v : values) { if (StringUtil.isNotBlank(v)) { - buf.append("&fields.").append(LaFunctions.u(entry.getKey())).append('=').append(LaFunctions.u(v)); + pagingQueryList.add("fields." + LaFunctions.u(entry.getKey()) + "=" + LaFunctions.u(v)); } } } } } - - return buf.toString(); + request.setAttribute(Constants.PAGING_QUERY_LIST, pagingQueryList); } protected static class WebRenderData extends SearchRenderData { diff --git a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java index 84c82a499..8c5738e3a 100644 --- a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java +++ b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java @@ -26,10 +26,12 @@ import java.util.Enumeration; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringEscapeUtils; +import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.Constants; import org.codelibs.fess.entity.FacetQueryView; import org.codelibs.fess.helper.ViewHelper; @@ -37,6 +39,8 @@ import org.codelibs.fess.util.ComponentUtil; import org.lastaflute.di.util.LdiURLUtil; import org.lastaflute.web.util.LaRequestUtil; +import opennlp.tools.parser.Cons; + public class FessFunctions { private static final String GEO_PREFIX = "geo."; @@ -119,6 +123,23 @@ public class FessFunctions { return df.format((double) value / ratio); } + public static String pagingQuery(final String query) { + final HttpServletRequest request = LaRequestUtil.getRequest(); + @SuppressWarnings("unchecked") + List pagingQueryList = (List) request.getAttribute(Constants.PAGING_QUERY_LIST); + if (pagingQueryList != null) { + final String prefix; + if (query != null) { + prefix = "ex_q=" + query.split(":")[0] + "%3A"; + } else { + prefix = null; + } + return pagingQueryList.stream().filter(s -> prefix == null || !s.startsWith(prefix)) + .collect(Collectors.joining("&", "&", StringUtil.EMPTY)); + } + return StringUtil.EMPTY; + } + public static String facetQuery() { return createQuery(Constants.FACET_QUERY, FACET_PREFIX); } diff --git a/src/main/webapp/WEB-INF/fe.tld b/src/main/webapp/WEB-INF/fe.tld index 1db28e0f8..86dde524b 100644 --- a/src/main/webapp/WEB-INF/fe.tld +++ b/src/main/webapp/WEB-INF/fe.tld @@ -71,6 +71,18 @@ + + + Returns query parameters for paging. + + pagingQuery + org.codelibs.fess.taglib.FessFunctions + java.lang.String pagingQuery(java.lang.String) + + ${fe:pagingQuery("ex_q=timestamp:")} + + + Returns query parameters for Facet. diff --git a/src/main/webapp/WEB-INF/orig/view/searchResults.jsp b/src/main/webapp/WEB-INF/orig/view/searchResults.jsp index 23197433b..519fe0d7d 100644 --- a/src/main/webapp/WEB-INF/orig/view/searchResults.jsp +++ b/src/main/webapp/WEB-INF/orig/view/searchResults.jsp @@ -118,7 +118,7 @@
  • + href="/search/search?q=${f:u(q)}&ex_q=label%3a${f:u(countEntry.key)}${fe:pagingQuery(null)}${fe:facetQuery()}${fe:geoQuery()}"> ${f:h(fe:label(countEntry.key))} ${f:h(countEntry.value)}
  • @@ -134,7 +134,7 @@
  • + href="/search/search?q=${f:u(q)}&ex_q=${f:u(queryEntry.value)}${fe:pagingQuery(queryEntry.value)}${fe:facetQuery()}${fe:geoQuery()}"> ${f:h(facetResponse.queryCountMap[queryEntry.value])}
  • @@ -158,7 +158,7 @@
      @@ -174,12 +174,12 @@ class="hidden-phone" class="active"> ${f:h(pageNumber)} + href="/search/move?q=${f:u(q)}&pn=${f:u(pageNumber)}&num=${f:u(pageSize)}${fe:pagingQuery(null)}${fe:facetQuery()}${fe:geoQuery()}">${f:h(pageNumber)} diff --git a/src/main/webapp/WEB-INF/view/searchResults.jsp b/src/main/webapp/WEB-INF/view/searchResults.jsp index 23197433b..519fe0d7d 100644 --- a/src/main/webapp/WEB-INF/view/searchResults.jsp +++ b/src/main/webapp/WEB-INF/view/searchResults.jsp @@ -118,7 +118,7 @@
    • + href="/search/search?q=${f:u(q)}&ex_q=label%3a${f:u(countEntry.key)}${fe:pagingQuery(null)}${fe:facetQuery()}${fe:geoQuery()}"> ${f:h(fe:label(countEntry.key))} ${f:h(countEntry.value)}
    • @@ -134,7 +134,7 @@
    • + href="/search/search?q=${f:u(q)}&ex_q=${f:u(queryEntry.value)}${fe:pagingQuery(queryEntry.value)}${fe:facetQuery()}${fe:geoQuery()}"> ${f:h(facetResponse.queryCountMap[queryEntry.value])}
    • @@ -158,7 +158,7 @@
        @@ -174,12 +174,12 @@ class="hidden-phone" class="active"> ${f:h(pageNumber)} + href="/search/move?q=${f:u(q)}&pn=${f:u(pageNumber)}&num=${f:u(pageSize)}${fe:pagingQuery(null)}${fe:facetQuery()}${fe:geoQuery()}">${f:h(pageNumber)}