Merged 5.2.N (5.2.2) to HEAD (5.2)

136096 gjames: Merged searchbcr (5.2.1) to 5.2.N (5.2.1)
      135842 gjames: SEARCH-376: Adding the includeRequest parameter


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@137468 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrei Rebegea
2017-06-15 11:00:27 +00:00
parent d197450d1a
commit 1f5f8cf0ee
7 changed files with 37 additions and 15 deletions

View File

@@ -25,6 +25,8 @@
*/
package org.alfresco.rest.api.search.context;
import org.alfresco.rest.api.search.model.SearchQuery;
import java.util.List;
/**
@@ -37,10 +39,13 @@ public class SearchContext
private final SpellCheckContext spellCheck;
private final List<FacetFieldContext> facetsFields;
private final List<FacetFieldContext> facetIntervals;
private final SearchQuery request;
public SearchContext(long lastTxId, List<FacetQueryContext> facetQueries, List<FacetFieldContext> facetsFields, List<FacetFieldContext> facetIntervals, SpellCheckContext spellCheck)
public SearchContext(long lastTxId, List<FacetQueryContext> facetQueries, List<FacetFieldContext> facetsFields, List<FacetFieldContext> facetIntervals, SpellCheckContext spellCheck,
SearchQuery request)
{
this.spellCheck = spellCheck;
this.request = request;
if (lastTxId > 0)
{
consistency = new Consistency(lastTxId);
@@ -79,6 +84,11 @@ public class SearchContext
return facetsFields;
}
public SearchQuery getRequest()
{
return request;
}
public class Consistency
{
private final long lastTxId;

View File

@@ -281,7 +281,7 @@ public class ResultMapper
for (Entry<String, Integer> fq:facetQueries.entrySet())
{
String filterQuery = null;
if (searchQuery != null)
if (searchQuery != null && searchQuery.getFacetQueries() != null)
{
Optional<FacetQuery> found = searchQuery.getFacetQueries().stream().filter(facetQuery -> fq.getKey().equals(facetQuery.getLabel())).findFirst();
filterQuery = found.isPresent()? found.get().getQuery():fq.getKey();
@@ -305,7 +305,7 @@ public class ResultMapper
}
//Put it all together
context = new SearchContext(solrResultSet.getLastIndexedTxId(), facetResults, ffcs, intervals, spellCheckContext);
context = new SearchContext(solrResultSet.getLastIndexedTxId(), facetResults, ffcs, intervals, spellCheckContext, searchQuery.includeRequest()?searchQuery:null);
return isNullContext(context)?null:context;
}

View File

@@ -56,12 +56,14 @@ public class SearchQuery
private final Limits limits;
private final GeneralHighlightParameters highlight;
private final IntervalParameters facetIntervals;
private final boolean includeRequest;
public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null,null, null, null,null, null, null, null, null, null, null);
public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null, null,null, null, null,null, null, null, null, null, null, null);
@JsonCreator
public SearchQuery(@JsonProperty("query") Query query,
@JsonProperty("paging") Paging paging,
@JsonProperty("includeRequest") Boolean includeRequest,
@JsonProperty("include") List<String> include,
@JsonProperty("fields") List<String> fields,
@JsonProperty("sort") List<SortDef> sort,
@@ -77,6 +79,7 @@ public class SearchQuery
@JsonProperty("facetIntervals")IntervalParameters facetIntervals)
{
this.query = query;
this.includeRequest = includeRequest==null?false:includeRequest;
this.paging = paging;
this.include = include;
this.fields = fields;
@@ -166,4 +169,9 @@ public class SearchQuery
{
return limits;
}
public boolean includeRequest()
{
return includeRequest;
}
}

View File

@@ -230,7 +230,7 @@ public class ResultMapperTests
public void testToCollectionWithPagingInfo() throws Exception
{
ResultSet results = mockResultset(Arrays.asList(514l), Arrays.asList(566l, VERSIONED_ID));
CollectionWithPagingInfo<Node> collectionWithPage = mapper.toCollectionWithPagingInfo(EMPTY_PARAMS, null, results);
CollectionWithPagingInfo<Node> collectionWithPage = mapper.toCollectionWithPagingInfo(EMPTY_PARAMS, SearchQuery.EMPTY, results);
assertNotNull(collectionWithPage);
Long found = results.getNumberFound();
assertEquals(found.intValue(), collectionWithPage.getTotalItems().intValue());
@@ -278,17 +278,21 @@ public class ResultMapperTests
assertEquals("last",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getLabel());
assertEquals("cm:creator:(a,b]",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getFilterQuery());
assertEquals(4,searchContext.getFacetIntervals().get(0).getBuckets().get(0).getCount());
//Requests search Query
assertNotNull(searchContext.getRequest());
assertEquals("great", searchContext.getRequest().getQuery().getUserQuery());
}
@Test
public void testIsNullContext() throws Exception
{
assertTrue(mapper.isNullContext(new SearchContext(0l,null,null,null,null)));
assertFalse(mapper.isNullContext(new SearchContext(1l,null,null,null,null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,null,new SpellCheckContext(null, null))));
assertFalse(mapper.isNullContext(new SearchContext(0l,Arrays.asList(new FacetQueryContext(null, null, 0)),null,null,null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,Arrays.asList(new FacetFieldContext(null, null)),null,null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,Arrays.asList(new FacetFieldContext(null, null)),null)));
assertTrue(mapper.isNullContext(new SearchContext(0l,null,null,null,null, null)));
assertFalse(mapper.isNullContext(new SearchContext(1l,null,null,null,null, null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,null,new SpellCheckContext(null, null), null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,Arrays.asList(new FacetQueryContext(null, null, 0)),null,null,null, null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,Arrays.asList(new FacetFieldContext(null, null)),null,null, null)));
assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,Arrays.asList(new FacetFieldContext(null, null)),null, null)));
}
@Test

View File

@@ -652,7 +652,7 @@ public class SearchMapperTests
private SearchQuery minimalQuery()
{
Query query = new Query("cmis", "foo", "");
SearchQuery sq = new SearchQuery(query,null, null, null, null, null, null, null, null, null, null, null, null, null, null);
SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
return sq;
}
}

View File

@@ -50,7 +50,6 @@ import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* Tests json -> SearchQuery deserialization
@@ -174,7 +173,7 @@ public class SearchQuerySerializerTests
FacetFieldContext ffc = new FacetFieldContext("theLabel", Arrays.asList(new Bucket("b1", "name:b1", 23, "displayText1"), new Bucket("b2", null, 34, "displayText2")));
SearchContext searchContext = new SearchContext(23l, Arrays.asList(new FacetQueryContext("f1", "creator:bob", 15), new FacetQueryContext("f2", null, 20)),
Arrays.asList(ffc), null,
new SpellCheckContext("aFlag", Arrays.asList("bish", "bash")));
new SpellCheckContext("aFlag", Arrays.asList("bish", "bash")), null);
CollectionWithPagingInfo<ExecutionResult> coll = CollectionWithPagingInfo.asPaged(null, Arrays.asList(exec1), false, 2, null, searchContext);
String out = helper.writeResponse(coll);
assertTrue("There must 'context' json output", out.contains("\"context\":{\"consistency\":{\"lastTxId\":23}"));
@@ -186,7 +185,7 @@ public class SearchQuerySerializerTests
assertTrue("There must 'bucket1' json output", out.contains("{\"label\":\"b1\",\"filterQuery\":\"name:b1\",\"count\":23,\"display\":\"displayText1\"}"));
assertTrue("There must 'bucket2' json output", out.contains("{\"label\":\"b2\",\"count\":34,\"display\":\"displayText2\"}"));
searchContext = new SearchContext(-1, null, null,null, null);
searchContext = new SearchContext(-1, null, null,null, null, null);
coll = CollectionWithPagingInfo.asPaged(null, Arrays.asList(exec1), false, 2, null, searchContext);
out = helper.writeResponse(coll);
assertTrue("There must NOT BE a 'context' json output", out.contains("\"context\":{}"));

View File

@@ -56,6 +56,7 @@ public class SerializerTestHelper implements RequestReader
public static final String JSON = "{ \"query\": {\"query\": \"g*\",\"userQuery\": \"great\",\"language\": \"afts\"}, "
+ "\"paging\": {\"maxItems\": \"99\",\"skipCount\": \"4\"},"
+ "\"includeRequest\": true,"
+ "\"sort\": {\"type\": \"FIELD\",\"field\": \"cm:title\",\"ascending\": \"true\"},"
+ "\"templates\": [{\"name\": \"mytemp\",\"template\": \"ATEMP\"}, {\"name\": \"yourtemp\",\"template\": \"%cm:content\"}],"
+ "\"defaults\": {\"namespace\": \"namesp\",\"defaultFieldName\": \"myfield\",\"defaultFTSOperator\": \"AND\", \"textAttributes\": [\"roy\", \"king\"]},"