mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-08 14:51:49 +00:00
Merged searchbcr (5.2.1) to 5.2.N (5.2.1)
135772 gjames: SEARCH-419: Correct handling of fieldfacet label and exclusion filters git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@136093 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -474,7 +474,7 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildUrlParameters(searchParameters, mapping, encoder, url);
|
buildUrlParameters(searchParameters, mapping.isSharded(), encoder, url);
|
||||||
|
|
||||||
final String searchTerm = searchParameters.getSearchTerm();
|
final String searchTerm = searchParameters.getSearchTerm();
|
||||||
String spellCheckQueryStr = null;
|
String spellCheckQueryStr = null;
|
||||||
@@ -590,12 +590,12 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
|
|||||||
/**
|
/**
|
||||||
* Builds most of the Url parameters for a Solr Http request.
|
* Builds most of the Url parameters for a Solr Http request.
|
||||||
* @param searchParameters
|
* @param searchParameters
|
||||||
* @param mapping
|
* @param isSharded
|
||||||
* @param encoder
|
* @param encoder
|
||||||
* @param url
|
* @param url
|
||||||
* @throws UnsupportedEncodingException
|
* @throws UnsupportedEncodingException
|
||||||
*/
|
*/
|
||||||
public void buildUrlParameters(SearchParameters searchParameters, SolrStoreMappingWrapper mapping, URLCodec encoder, StringBuilder url)
|
public void buildUrlParameters(SearchParameters searchParameters, boolean isSharded, URLCodec encoder, StringBuilder url)
|
||||||
throws UnsupportedEncodingException
|
throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
Locale locale = extractLocale(searchParameters);
|
Locale locale = extractLocale(searchParameters);
|
||||||
@@ -633,12 +633,12 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
|
|||||||
url.append("&fq=").append(encoder.encode(filterQuery, "UTF-8"));
|
url.append("&fq=").append(encoder.encode(filterQuery, "UTF-8"));
|
||||||
}
|
}
|
||||||
|
|
||||||
buildFacetParameters(searchParameters, mapping, encoder, url);
|
buildFacetParameters(searchParameters, isSharded, encoder, url);
|
||||||
buildFacetIntervalParameters(searchParameters, encoder, url);
|
buildFacetIntervalParameters(searchParameters, encoder, url);
|
||||||
buildHightlightParameters(searchParameters, encoder, url);
|
buildHightlightParameters(searchParameters, encoder, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void buildFacetParameters(SearchParameters searchParameters, SolrStoreMappingWrapper mapping, URLCodec encoder, StringBuilder url)
|
protected void buildFacetParameters(SearchParameters searchParameters, boolean isSharded, URLCodec encoder, StringBuilder url)
|
||||||
throws UnsupportedEncodingException
|
throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
if(searchParameters.getFieldFacets().size() > 0 || searchParameters.getFacetQueries().size() > 0)
|
if(searchParameters.getFieldFacets().size() > 0 || searchParameters.getFacetQueries().size() > 0)
|
||||||
@@ -646,15 +646,45 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
|
|||||||
url.append("&facet=").append(encoder.encode("true", "UTF-8"));
|
url.append("&facet=").append(encoder.encode("true", "UTF-8"));
|
||||||
for(FieldFacet facet : searchParameters.getFieldFacets())
|
for(FieldFacet facet : searchParameters.getFieldFacets())
|
||||||
{
|
{
|
||||||
url.append("&facet.field=").append(encoder.encode(facet.getField(), "UTF-8"));
|
url.append("&facet.field=");
|
||||||
|
String field = facet.getField();
|
||||||
|
StringBuilder prefix = new StringBuilder("{!afts ");
|
||||||
|
|
||||||
|
int startIndex = field.startsWith("{!afts")?7:0;
|
||||||
|
|
||||||
|
if (facet.getExcludeFilters() != null && !facet.getExcludeFilters().isEmpty())
|
||||||
|
{
|
||||||
|
prefix.append("ex="+String.join(",", facet.getExcludeFilters())+" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (facet.getLabel() != null && !facet.getLabel().isEmpty())
|
||||||
|
{
|
||||||
|
prefix.append("key="+facet.getLabel()+" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startIndex!=0)
|
||||||
|
{
|
||||||
|
int endIndex = field.indexOf("}");
|
||||||
|
prefix.append(field.substring(startIndex,endIndex>startIndex?endIndex:startIndex));
|
||||||
|
field = field.substring(endIndex+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefix.length() > 7)
|
||||||
|
{
|
||||||
|
url.append(encoder.encode(prefix.toString().trim(), "UTF-8"));
|
||||||
|
url.append(encoder.encode("}", "UTF-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
url.append(encoder.encode(field, "UTF-8"));
|
||||||
|
|
||||||
if(facet.getEnumMethodCacheMinDF() != 0)
|
if(facet.getEnumMethodCacheMinDF() != 0)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.enum.cache.minDf", "UTF-8")).append("=").append(encoder.encode(""+facet.getEnumMethodCacheMinDF(), "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.enum.cache.minDf", "UTF-8")).append("=").append(encoder.encode(""+facet.getEnumMethodCacheMinDF(), "UTF-8"));
|
||||||
}
|
}
|
||||||
int facetLimit;
|
int facetLimit;
|
||||||
if(facet.getLimitOrNull() == null)
|
if(facet.getLimitOrNull() == null)
|
||||||
{
|
{
|
||||||
if(mapping.isSharded())
|
if(isSharded())
|
||||||
{
|
{
|
||||||
facetLimit = defaultShardedFacetLimit;
|
facetLimit = defaultShardedFacetLimit;
|
||||||
}
|
}
|
||||||
@@ -667,30 +697,30 @@ public class SolrQueryHTTPClient implements BeanFactoryAware, InitializingBean
|
|||||||
{
|
{
|
||||||
facetLimit = facet.getLimitOrNull().intValue();
|
facetLimit = facet.getLimitOrNull().intValue();
|
||||||
}
|
}
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.limit", "UTF-8")).append("=").append(encoder.encode(""+facetLimit, "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.limit", "UTF-8")).append("=").append(encoder.encode(""+facetLimit, "UTF-8"));
|
||||||
if(facet.getMethod() != null)
|
if(facet.getMethod() != null)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.method", "UTF-8")).append("=").append(encoder.encode(facet.getMethod()== FieldFacetMethod.ENUM ? "enum" : "fc", "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.method", "UTF-8")).append("=").append(encoder.encode(facet.getMethod()== FieldFacetMethod.ENUM ? "enum" : "fc", "UTF-8"));
|
||||||
}
|
}
|
||||||
if(facet.getMinCount() != 0)
|
if(facet.getMinCount() != 0)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.mincount", "UTF-8")).append("=").append(encoder.encode(""+facet.getMinCount(), "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.mincount", "UTF-8")).append("=").append(encoder.encode(""+facet.getMinCount(), "UTF-8"));
|
||||||
}
|
}
|
||||||
if(facet.getOffset() != 0)
|
if(facet.getOffset() != 0)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.offset", "UTF-8")).append("=").append(encoder.encode(""+facet.getOffset(), "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.offset", "UTF-8")).append("=").append(encoder.encode(""+facet.getOffset(), "UTF-8"));
|
||||||
}
|
}
|
||||||
if(facet.getPrefix() != null)
|
if(facet.getPrefix() != null)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.prefix", "UTF-8")).append("=").append(encoder.encode(""+facet.getPrefix(), "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.prefix", "UTF-8")).append("=").append(encoder.encode(""+facet.getPrefix(), "UTF-8"));
|
||||||
}
|
}
|
||||||
if(facet.getSort() != null)
|
if(facet.getSort() != null)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.sort", "UTF-8")).append("=").append(encoder.encode(facet.getSort() == FieldFacetSort.COUNT ? "count" : "index", "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.sort", "UTF-8")).append("=").append(encoder.encode(facet.getSort() == FieldFacetSort.COUNT ? "count" : "index", "UTF-8"));
|
||||||
}
|
}
|
||||||
if(facet.isCountDocsMissingFacetField() != false)
|
if(facet.isCountDocsMissingFacetField() != false)
|
||||||
{
|
{
|
||||||
url.append("&").append(encoder.encode("f."+facet.getField()+".facet.missing", "UTF-8")).append("=").append(encoder.encode(""+facet.isCountDocsMissingFacetField(), "UTF-8"));
|
url.append("&").append(encoder.encode("f."+field+".facet.missing", "UTF-8")).append("=").append(encoder.encode(""+facet.isCountDocsMissingFacetField(), "UTF-8"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.search.impl.solr;
|
package org.alfresco.repo.search.impl.solr;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertEquals;
|
||||||
import static org.alfresco.service.namespace.NamespaceService.CONTENT_MODEL_PREFIX;
|
import static org.alfresco.service.namespace.NamespaceService.CONTENT_MODEL_PREFIX;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
@@ -58,6 +59,7 @@ import org.alfresco.service.cmr.search.Interval;
|
|||||||
import org.alfresco.service.cmr.search.IntervalParameters;
|
import org.alfresco.service.cmr.search.IntervalParameters;
|
||||||
import org.alfresco.service.cmr.search.IntervalSet;
|
import org.alfresco.service.cmr.search.IntervalSet;
|
||||||
import org.alfresco.service.cmr.search.SearchParameters;
|
import org.alfresco.service.cmr.search.SearchParameters;
|
||||||
|
import org.alfresco.service.cmr.search.SearchParameters.FieldFacet;
|
||||||
import org.alfresco.service.cmr.search.SearchParameters.SortDefinition;
|
import org.alfresco.service.cmr.search.SearchParameters.SortDefinition;
|
||||||
import org.alfresco.service.cmr.search.SearchService;
|
import org.alfresco.service.cmr.search.SearchService;
|
||||||
import org.alfresco.service.cmr.search.StatsParameters;
|
import org.alfresco.service.cmr.search.StatsParameters;
|
||||||
@@ -102,7 +104,7 @@ public class SolrQueryHTTPClientTest
|
|||||||
when(dictionaryService.getProperty(notNull(QName.class))).thenAnswer(invocation ->
|
when(dictionaryService.getProperty(notNull(QName.class))).thenAnswer(invocation ->
|
||||||
{
|
{
|
||||||
Object[] args = invocation.getArguments();
|
Object[] args = invocation.getArguments();
|
||||||
QName qName = (QName)args[0];
|
QName qName = (QName) args[0];
|
||||||
if (qName.getLocalName().contains("created"))
|
if (qName.getLocalName().contains("created"))
|
||||||
{
|
{
|
||||||
return MockClassAttributeDefinition.mockPropertyDefinition(qName, DataTypeDefinition.DATE);
|
return MockClassAttributeDefinition.mockPropertyDefinition(qName, DataTypeDefinition.DATE);
|
||||||
@@ -138,7 +140,7 @@ public class SolrQueryHTTPClientTest
|
|||||||
assertTrue(url.contains("fq=ANCESTOR"));
|
assertTrue(url.contains("fq=ANCESTOR"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBuildStatsBody() throws JSONException
|
public void testBuildStatsBody() throws JSONException
|
||||||
{
|
{
|
||||||
@@ -147,15 +149,16 @@ public class SolrQueryHTTPClientTest
|
|||||||
JSONObject body = client.buildStatsBody(params, "myTenant", Locale.US);
|
JSONObject body = client.buildStatsBody(params, "myTenant", Locale.US);
|
||||||
assertNotNull(body);
|
assertNotNull(body);
|
||||||
JSONArray tenant = body.getJSONArray("tenants");
|
JSONArray tenant = body.getJSONArray("tenants");
|
||||||
assertEquals("myTenant",tenant.get(0).toString());
|
assertEquals("myTenant", tenant.get(0).toString());
|
||||||
JSONArray locale = body.getJSONArray("locales");
|
JSONArray locale = body.getJSONArray("locales");
|
||||||
assertEquals("en_US",locale.get(0).toString());
|
assertEquals("en_US", locale.get(0).toString());
|
||||||
String query = body.getString("query");
|
String query = body.getString("query");
|
||||||
assertTrue(query.contains("TYPE:"));
|
assertTrue(query.contains("TYPE:"));
|
||||||
assertTrue(query.contains("{http://www.alfresco.org/model/content/1.0}content"));
|
assertTrue(query.contains("{http://www.alfresco.org/model/content/1.0}content"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private StatsParameters getParameters() {
|
private StatsParameters getParameters()
|
||||||
|
{
|
||||||
|
|
||||||
StringBuilder luceneQuery = new StringBuilder();
|
StringBuilder luceneQuery = new StringBuilder();
|
||||||
luceneQuery.append(" +TYPE:\"" + ContentModel.TYPE_CONTENT + "\"");
|
luceneQuery.append(" +TYPE:\"" + ContentModel.TYPE_CONTENT + "\"");
|
||||||
@@ -163,9 +166,9 @@ public class SolrQueryHTTPClientTest
|
|||||||
StatsParameters params = new StatsParameters(SearchService.LANGUAGE_SOLR_FTS_ALFRESCO, luceneQuery.toString(), filterQuery, false);
|
StatsParameters params = new StatsParameters(SearchService.LANGUAGE_SOLR_FTS_ALFRESCO, luceneQuery.toString(), filterQuery, false);
|
||||||
params.addSort(new SortDefinition(SortDefinition.SortType.FIELD, "contentsize", false));
|
params.addSort(new SortDefinition(SortDefinition.SortType.FIELD, "contentsize", false));
|
||||||
params.addStatsParameter(StatsParameters.PARAM_FIELD, "contentsize");
|
params.addStatsParameter(StatsParameters.PARAM_FIELD, "contentsize");
|
||||||
params.addStatsParameter(StatsParameters.PARAM_FACET, StatsParameters.FACET_PREFIX+ContentModel.PROP_CREATED.toString());
|
params.addStatsParameter(StatsParameters.PARAM_FACET, StatsParameters.FACET_PREFIX + ContentModel.PROP_CREATED.toString());
|
||||||
params.addStatsParameter("Test1", StatsParameters.FACET_PREFIX+"author. .u");
|
params.addStatsParameter("Test1", StatsParameters.FACET_PREFIX + "author. .u");
|
||||||
params.addStatsParameter("Test2", StatsParameters.FACET_PREFIX+"creator. .u");
|
params.addStatsParameter("Test2", StatsParameters.FACET_PREFIX + "creator. .u");
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +178,7 @@ public class SolrQueryHTTPClientTest
|
|||||||
SearchParameters params = new SearchParameters();
|
SearchParameters params = new SearchParameters();
|
||||||
params.setSearchTerm("bob");
|
params.setSearchTerm("bob");
|
||||||
StringBuilder urlBuilder = new StringBuilder();
|
StringBuilder urlBuilder = new StringBuilder();
|
||||||
client.buildUrlParameters(params, null, encoder, urlBuilder);
|
client.buildUrlParameters(params, false, encoder, urlBuilder);
|
||||||
String url = urlBuilder.toString();
|
String url = urlBuilder.toString();
|
||||||
assertNotNull(url);
|
assertNotNull(url);
|
||||||
assertFalse(url.contains("&hl"));
|
assertFalse(url.contains("&hl"));
|
||||||
@@ -183,7 +186,7 @@ public class SolrQueryHTTPClientTest
|
|||||||
urlBuilder = new StringBuilder();
|
urlBuilder = new StringBuilder();
|
||||||
GeneralHighlightParameters highlightParameters = new GeneralHighlightParameters(null, null, null, null, null, null, null, null);
|
GeneralHighlightParameters highlightParameters = new GeneralHighlightParameters(null, null, null, null, null, null, null, null);
|
||||||
params.setHighlight(highlightParameters);
|
params.setHighlight(highlightParameters);
|
||||||
client.buildUrlParameters(params, null, encoder, urlBuilder);
|
client.buildUrlParameters(params, true, encoder, urlBuilder);
|
||||||
url = urlBuilder.toString();
|
url = urlBuilder.toString();
|
||||||
assertTrue(url.contains("&hl=true"));
|
assertTrue(url.contains("&hl=true"));
|
||||||
assertTrue(url.contains("&hl.q=bob"));
|
assertTrue(url.contains("&hl.q=bob"));
|
||||||
@@ -191,7 +194,7 @@ public class SolrQueryHTTPClientTest
|
|||||||
urlBuilder = new StringBuilder();
|
urlBuilder = new StringBuilder();
|
||||||
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, null);
|
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, null);
|
||||||
params.setHighlight(highlightParameters);
|
params.setHighlight(highlightParameters);
|
||||||
client.buildUrlParameters(params, null, encoder, urlBuilder);
|
client.buildUrlParameters(params, false, encoder, urlBuilder);
|
||||||
url = urlBuilder.toString();
|
url = urlBuilder.toString();
|
||||||
assertTrue(url.contains("&hl=true"));
|
assertTrue(url.contains("&hl=true"));
|
||||||
assertTrue(url.contains("&hl.q=bob"));
|
assertTrue(url.contains("&hl.q=bob"));
|
||||||
@@ -201,42 +204,43 @@ public class SolrQueryHTTPClientTest
|
|||||||
assertTrue(url.contains("&hl.mergeContiguous=false"));
|
assertTrue(url.contains("&hl.mergeContiguous=false"));
|
||||||
assertTrue(url.contains("&hl.usePhraseHighlighter=true"));
|
assertTrue(url.contains("&hl.usePhraseHighlighter=true"));
|
||||||
|
|
||||||
assertTrue(url.contains("&hl.simple.pre="+encoder.encode("{", "UTF-8")));
|
assertTrue(url.contains("&hl.simple.pre=" + encoder.encode("{", "UTF-8")));
|
||||||
assertTrue(url.contains("&hl.simple.post="+encoder.encode("}", "UTF-8")));
|
assertTrue(url.contains("&hl.simple.post=" + encoder.encode("}", "UTF-8")));
|
||||||
|
|
||||||
List<FieldHighlightParameters> fields = Arrays.asList(new FieldHighlightParameters(null,null,null,null,null,null));
|
List<FieldHighlightParameters> fields = Arrays.asList(new FieldHighlightParameters(null, null, null, null, null, null));
|
||||||
urlBuilder = new StringBuilder();
|
urlBuilder = new StringBuilder();
|
||||||
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, fields);
|
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, fields);
|
||||||
params.setHighlight(highlightParameters);
|
params.setHighlight(highlightParameters);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
client.buildUrlParameters(params, null, encoder, urlBuilder);
|
client.buildUrlParameters(params, false, encoder, urlBuilder);
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException iae)
|
catch (IllegalArgumentException iae)
|
||||||
{
|
{
|
||||||
assertNotNull("no fieldname specfied so invalid",iae);
|
assertNotNull("no fieldname specfied so invalid", iae);
|
||||||
}
|
}
|
||||||
|
|
||||||
fields = Arrays.asList(new FieldHighlightParameters("desc",50,100,false,"@","#"), new FieldHighlightParameters("title",55,105,true,"*","¿"));
|
fields = Arrays.asList(new FieldHighlightParameters("desc", 50, 100, false, "@", "#"),
|
||||||
|
new FieldHighlightParameters("title", 55, 105, true, "*", "¿"));
|
||||||
urlBuilder = new StringBuilder();
|
urlBuilder = new StringBuilder();
|
||||||
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, fields);
|
highlightParameters = new GeneralHighlightParameters(5, 10, false, "{", "}", 20, true, fields);
|
||||||
params.setHighlight(highlightParameters);
|
params.setHighlight(highlightParameters);
|
||||||
client.buildUrlParameters(params, null, encoder, urlBuilder);
|
client.buildUrlParameters(params, false, encoder, urlBuilder);
|
||||||
url = urlBuilder.toString();
|
url = urlBuilder.toString();
|
||||||
assertTrue(url.contains("&hl=true"));
|
assertTrue(url.contains("&hl=true"));
|
||||||
assertTrue(url.contains("&hl.fl="+encoder.encode("desc,title", "UTF-8")));
|
assertTrue(url.contains("&hl.fl=" + encoder.encode("desc,title", "UTF-8")));
|
||||||
assertTrue(url.contains("&f.desc.hl.snippets=50"));
|
assertTrue(url.contains("&f.desc.hl.snippets=50"));
|
||||||
assertTrue(url.contains("&f.title.hl.snippets=55"));
|
assertTrue(url.contains("&f.title.hl.snippets=55"));
|
||||||
assertTrue(url.contains("&f.desc.hl.fragsize=100"));
|
assertTrue(url.contains("&f.desc.hl.fragsize=100"));
|
||||||
assertTrue(url.contains("&f.title.hl.fragsize=105"));
|
assertTrue(url.contains("&f.title.hl.fragsize=105"));
|
||||||
assertTrue(url.contains("&f.desc.hl.mergeContiguous=false"));
|
assertTrue(url.contains("&f.desc.hl.mergeContiguous=false"));
|
||||||
assertTrue(url.contains("&f.title.hl.mergeContiguous=true"));
|
assertTrue(url.contains("&f.title.hl.mergeContiguous=true"));
|
||||||
assertTrue(url.contains("&f.desc.hl.simple.pre="+encoder.encode("@", "UTF-8")));
|
assertTrue(url.contains("&f.desc.hl.simple.pre=" + encoder.encode("@", "UTF-8")));
|
||||||
assertTrue(url.contains("&f.desc.hl.simple.post="+encoder.encode("#", "UTF-8")));
|
assertTrue(url.contains("&f.desc.hl.simple.post=" + encoder.encode("#", "UTF-8")));
|
||||||
assertTrue(url.contains("&f.title.hl.simple.pre="+encoder.encode("*", "UTF-8")));
|
assertTrue(url.contains("&f.title.hl.simple.pre=" + encoder.encode("*", "UTF-8")));
|
||||||
assertTrue(url.contains("&f.title.hl.simple.post="+encoder.encode("¿", "UTF-8")));
|
assertTrue(url.contains("&f.title.hl.simple.post=" + encoder.encode("¿", "UTF-8")));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,7 +271,8 @@ public class SolrQueryHTTPClientTest
|
|||||||
assertTrue(url.contains("&facet=true"));
|
assertTrue(url.contains("&facet=true"));
|
||||||
assertTrue(url.contains(encoder.encode("{!afts key=numbers}(1,10]", "UTF-8")));
|
assertTrue(url.contains(encoder.encode("{!afts key=numbers}(1,10]", "UTF-8")));
|
||||||
|
|
||||||
List<Interval> intervalList = Arrays.asList(new Interval("cm:price", "Price", null), new Interval("cm:created", "Created", Arrays.asList(new IntervalSet("2015", "2016-12", "special", false, true))));
|
List<Interval> intervalList = Arrays.asList(new Interval("cm:price", "Price", null),
|
||||||
|
new Interval("cm:created", "Created", Arrays.asList(new IntervalSet("2015", "2016-12", "special", false, true))));
|
||||||
params.setInterval(new IntervalParameters(Arrays.asList(intervalSet), intervalList));
|
params.setInterval(new IntervalParameters(Arrays.asList(intervalSet), intervalList));
|
||||||
urlBuilder = new StringBuilder();
|
urlBuilder = new StringBuilder();
|
||||||
client.buildFacetIntervalParameters(params, encoder, urlBuilder);
|
client.buildFacetIntervalParameters(params, encoder, urlBuilder);
|
||||||
@@ -286,4 +291,67 @@ public class SolrQueryHTTPClientTest
|
|||||||
TimeZone.setDefault(defaultTimeZone);
|
TimeZone.setDefault(defaultTimeZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
@Test
|
||||||
|
public void testBuildFieldFacets() throws UnsupportedEncodingException
|
||||||
|
{
|
||||||
|
SearchParameters params = new SearchParameters();
|
||||||
|
params.setSearchTerm("bob");
|
||||||
|
|
||||||
|
SearchParameters.FieldFacet prefixff = new SearchParameters.FieldFacet("{!afts something=right}modifier");
|
||||||
|
SearchParameters.FieldFacet ff = new SearchParameters.FieldFacet("creator");
|
||||||
|
params.addFieldFacet(prefixff);
|
||||||
|
params.addFieldFacet(ff);
|
||||||
|
|
||||||
|
StringBuilder urlBuilder = new StringBuilder();
|
||||||
|
client.buildFacetParameters(params, false, encoder, urlBuilder);
|
||||||
|
String url = urlBuilder.toString();
|
||||||
|
assertNotNull(url);
|
||||||
|
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("f.modifier.facet.limit=100"));
|
||||||
|
|
||||||
|
prefixff.setLabel("myLabel");
|
||||||
|
ff.setLabel("yourLabel");
|
||||||
|
|
||||||
|
urlBuilder = new StringBuilder();
|
||||||
|
client.buildFacetParameters(params, false, encoder, urlBuilder);
|
||||||
|
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("f.creator.facet.limit=100"));
|
||||||
|
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"));
|
||||||
|
ff.setExcludeFilters(Arrays.asList("B"));
|
||||||
|
|
||||||
|
urlBuilder = new StringBuilder();
|
||||||
|
client.buildFacetParameters(params, false, encoder, urlBuilder);
|
||||||
|
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("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("f.modifier.facet.limit=100"));
|
||||||
|
|
||||||
|
prefixff.setField("bill");
|
||||||
|
prefixff.setExcludeFilters(Collections.emptyList());
|
||||||
|
ff.setField("{!afts}ben");
|
||||||
|
ff.setLabel(null);
|
||||||
|
|
||||||
|
urlBuilder = new StringBuilder();
|
||||||
|
client.buildFacetParameters(params, false, encoder, urlBuilder);
|
||||||
|
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("f.ben.facet.limit=100"));
|
||||||
|
assertTrue(url.contains("facet.field="+encoder.encode("{!afts key=myLabel}bill", "UTF-8")));
|
||||||
|
assertTrue(url.contains("f.bill.facet.limit=100"));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user