diff --git a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java
index 5df506bbcb..fc651c6076 100644
--- a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java
+++ b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java
@@ -1,28 +1,28 @@
-/*
- * #%L
- * Alfresco Repository
- * %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
package org.alfresco.repo.search.impl.solr;
import static org.alfresco.util.SearchDateConversion.parseDateInterval;
@@ -634,6 +634,7 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
}
buildFacetParameters(searchParameters, isSharded, encoder, url);
+ buildPivotParameters(searchParameters, encoder, url);
buildFacetIntervalParameters(searchParameters, encoder, url);
buildHightlightParameters(searchParameters, encoder, url);
}
@@ -735,6 +736,15 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
}
}
+ protected void buildPivotParameters(SearchParameters searchParameters, URLCodec encoder, StringBuilder url) throws UnsupportedEncodingException
+ {
+ if (searchParameters.getPivots() != null && !searchParameters.getPivots().isEmpty())
+ {
+ url.append("&facet=").append(encoder.encode("true", "UTF-8"));
+ url.append("&facet.pivot=").append(encoder.encode(String.join(",", searchParameters.getPivots()), "UTF-8"));
+ }
+ }
+
protected void buildHightlightParameters(SearchParameters searchParameters, URLCodec encoder, StringBuilder url) throws UnsupportedEncodingException
{
if (searchParameters.getHighlight() != null)
diff --git a/source/test-java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClientTest.java b/source/test-java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClientTest.java
index 0e2af80c79..615596064b 100644
--- a/source/test-java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClientTest.java
+++ b/source/test-java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClientTest.java
@@ -101,8 +101,7 @@ public class SolrQueryHTTPClientTest
when(namespaceDAO.getPrefixes()).thenReturn(Arrays.asList(CONTENT_MODEL_PREFIX, "exif"));
when(namespaceDAO.getNamespaceURI(anyString())).thenReturn(NamespaceService.CONTENT_MODEL_1_0_URI);
- when(dictionaryService.getProperty(notNull(QName.class))).thenAnswer(invocation ->
- {
+ when(dictionaryService.getProperty(notNull(QName.class))).thenAnswer(invocation -> {
Object[] args = invocation.getArguments();
QName qName = (QName) args[0];
if (qName.getLocalName().contains("created"))
@@ -309,7 +308,7 @@ public class SolrQueryHTTPClientTest
assertTrue(url.contains("&facet=true"));
assertTrue(url.contains("facet.field=creator"));
assertTrue(url.contains("f.creator.facet.limit=100"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts something=right}modifier", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts something=right}modifier", "UTF-8")));
assertTrue(url.contains("f.modifier.facet.limit=100"));
prefixff.setLabel("myLabel");
@@ -320,9 +319,9 @@ public class SolrQueryHTTPClientTest
url = urlBuilder.toString();
assertNotNull(url);
assertTrue(url.contains("&facet=true"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts key=yourLabel}creator", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts key=yourLabel}creator", "UTF-8")));
assertTrue(url.contains("f.creator.facet.limit=100"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts key=myLabel something=right}modifier", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts key=myLabel something=right}modifier", "UTF-8")));
assertTrue(url.contains("f.modifier.facet.limit=100"));
prefixff.setExcludeFilters(Arrays.asList("x", "y"));
@@ -333,9 +332,9 @@ public class SolrQueryHTTPClientTest
url = urlBuilder.toString();
assertNotNull(url);
assertTrue(url.contains("&facet=true"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts ex=B key=yourLabel}creator", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts ex=B key=yourLabel}creator", "UTF-8")));
assertTrue(url.contains("f.creator.facet.limit=100"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts ex=x,y key=myLabel something=right}modifier", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts ex=x,y key=myLabel something=right}modifier", "UTF-8")));
assertTrue(url.contains("f.modifier.facet.limit=100"));
prefixff.setField("bill");
@@ -348,10 +347,37 @@ public class SolrQueryHTTPClientTest
url = urlBuilder.toString();
assertNotNull(url);
assertTrue(url.contains("&facet=true"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts ex=B}ben", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts ex=B}ben", "UTF-8")));
assertTrue(url.contains("f.ben.facet.limit=100"));
- assertTrue(url.contains("facet.field="+encoder.encode("{!afts key=myLabel}bill", "UTF-8")));
+ assertTrue(url.contains("facet.field=" + encoder.encode("{!afts key=myLabel}bill", "UTF-8")));
assertTrue(url.contains("f.bill.facet.limit=100"));
}
+
+ @Test
+ public void testBuildPivots() throws UnsupportedEncodingException
+ {
+ SearchParameters params = new SearchParameters();
+ params.setSearchTerm("bob");
+ params.addPivot("creator");
+
+ StringBuilder urlBuilder = new StringBuilder();
+
+ client.buildPivotParameters(params, encoder, urlBuilder);
+ String url = urlBuilder.toString();
+ assertNotNull(url);
+ assertTrue(url.contains("&facet=true"));
+ assertTrue(url.contains("facet.pivot=creator"));
+
+ params.addPivot("cm:name");
+ params.addPivot("{!stats=piv1}cat");
+
+ urlBuilder = new StringBuilder();
+ client.buildPivotParameters(params, encoder, urlBuilder);
+ url = urlBuilder.toString();
+ assertNotNull(url);
+ assertTrue(url.contains("&facet=true"));
+ assertTrue(url.contains("facet.pivot="+ encoder.encode("creator,cm:name,{!stats=piv1}cat", "UTF-8")));
+ }
+
}
\ No newline at end of file