Search in sources :

Example 16 with SearchQuery

use of org.alfresco.rest.api.search.model.SearchQuery in project alfresco-remote-api by Alfresco.

the class ResultMapperTests method facetFormatTest.

@Test
public /**
 * Validates that when facetFormat is specified then all facets are returned
 * in the generic facet response format AKA V2.
 */
void facetFormatTest() throws Exception {
    String jsonQuery = "{\"query\": {\"query\": \"alfresco\"}," + "\"facetQueries\": [" + "{\"query\": \"content.size:[0 TO 102400]\", \"label\": \"small\"}," + "{\"query\": \"content.size:[102400 TO 1048576]\", \"label\": \"medium\"}," + "{\"query\": \"content.size:[1048576 TO 16777216]\", \"label\": \"large\"}]" + ",\"facetFormat\":\"V2\"" + "}";
    String expectedResponse = "{\"responseHeader\":{\"status\":0,\"QTime\":9},\"_original_parameters_\":\"org.apache.solr.common.params.DefaultSolrParams:{params(df=TEXT&alternativeDic=DEFAULT_DICTIONARY&fl=DBID,score&start=0&fq={!afts}AUTHORITY_FILTER_FROM_JSON&fq={!afts}TENANT_FILTER_FROM_JSON&rows=1000&locale=en_US&wt=json),defaults(carrot.url=id&spellcheck.collateExtendedResults=true&carrot.produceSummary=true&spellcheck.maxCollations=3&spellcheck.maxCollationTries=5&spellcheck.alternativeTermCount=2&spellcheck.extendedResults=false&defType=afts&spellcheck.maxResultsForSuggest=5&spellcheck=false&carrot.outputSubClusters=false&spellcheck.count=5&carrot.title=mltext@m___t@{http://www.alfresco.org/model/content/1.0}title&carrot.snippet=content@s___t@{http://www.alfresco.org/model/content/1.0}content&spellcheck.collate=true)}\",\"_field_mappings_\":{},\"_date_mappings_\":{},\"_range_mappings_\":{},\"_pivot_mappings_\":{},\"_interval_mappings_\":{},\"_stats_field_mappings_\":{},\"_stats_facet_mappings_\":{},\"_facet_function_mappings_\":{},\"response\":{\"numFound\":6,\"start\":0,\"maxScore\":0.7849362,\"docs\":[{\"DBID\":565,\"score\":0.7849362},{\"DBID\":566,\"score\":0.7849362},{\"DBID\":521,\"score\":0.3540957},{\"DBID\":514,\"score\":0.33025497},{\"DBID\":420,\"score\":0.32440513},{\"DBID\":415,\"score\":0.2780319}]}," + "\"spellcheck\":{\"searchInsteadFor\":\"alfresco\"}," + "\"facet_counts\":{\"facet_queries\": {\"small\": 52,\"large\": 0,\"medium\": 0}}," + "\"processedDenies\":true, \"lastIndexedTx\":34}";
    ResultSet results = mockResultset(expectedResponse);
    SearchQuery searchQuery = helper.extractFromJson(jsonQuery);
    SearchRequestContext searchRequest = SearchRequestContext.from(searchQuery);
    SearchContext searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
    assertEquals(34l, searchContext.getConsistency().getlastTxId());
    assertEquals(null, searchContext.getFacetQueries());
    assertEquals(1, searchContext.getFacets().size());
    assertEquals(3, searchContext.getFacets().get(0).getBuckets().size());
    assertEquals("small", searchContext.getFacets().get(0).getBuckets().get(0).getLabel());
    assertEquals("content.size:[0 TO 102400]", searchContext.getFacets().get(0).getBuckets().get(0).getFilterQuery());
    assertFalse(searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().isEmpty());
    Metric[] metrics = searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().toArray(new Metric[searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().size()]);
    assertEquals(METRIC_TYPE.count, metrics[0].getType());
    assertEquals("{count=52}", metrics[0].getValue().toString());
    jsonQuery = jsonQuery.replace("V2", "V1");
    searchQuery = helper.extractFromJson(jsonQuery);
    results = mockResultset(expectedResponse);
    searchRequest = SearchRequestContext.from(searchQuery);
    searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
    assertEquals(34l, searchContext.getConsistency().getlastTxId());
    assertEquals(3, searchContext.getFacetQueries().size());
    assertEquals("small", searchContext.getFacetQueries().get(0).getLabel());
    assertEquals("content.size:[0 TO 102400]", searchContext.getFacetQueries().get(0).getFilterQuery());
    assertEquals(52, searchContext.getFacetQueries().get(0).getCount());
    assertEquals("large", searchContext.getFacetQueries().get(1).getLabel());
    // FacetField Test
    jsonQuery = "{\"query\": {\"query\": \"A*\"}," + "\"facetFields\": {\"facets\": [" + "{\"field\": \"creator\", \"mincount\": 1}," + "{\"field\": \"modifier\", \"mincount\": 1}]}," + "\"facetFormat\":\"V1\"}";
    expectedResponse = "{\"responseHeader\":{\"status\":0,\"QTime\":9},\"_original_parameters_\":\"org.apache.solr.common.params.DefaultSolrParams:{params(df=TEXT&alternativeDic=DEFAULT_DICTIONARY&fl=DBID,score&start=0&fq={!afts}AUTHORITY_FILTER_FROM_JSON&fq={!afts}TENANT_FILTER_FROM_JSON&rows=1000&locale=en_US&wt=json),defaults(carrot.url=id&spellcheck.collateExtendedResults=true&carrot.produceSummary=true&spellcheck.maxCollations=3&spellcheck.maxCollationTries=5&spellcheck.alternativeTermCount=2&spellcheck.extendedResults=false&defType=afts&spellcheck.maxResultsForSuggest=5&spellcheck=false&carrot.outputSubClusters=false&spellcheck.count=5&carrot.title=mltext@m___t@{http://www.alfresco.org/model/content/1.0}title&carrot.snippet=content@s___t@{http://www.alfresco.org/model/content/1.0}content&spellcheck.collate=true)}\",\"_field_mappings_\":{},\"_date_mappings_\":{},\"_range_mappings_\":{},\"_pivot_mappings_\":{},\"_interval_mappings_\":{},\"_stats_field_mappings_\":{},\"_stats_facet_mappings_\":{},\"_facet_function_mappings_\":{},\"response\":{\"numFound\":6,\"start\":0,\"maxScore\":0.7849362,\"docs\":[{\"DBID\":565,\"score\":0.7849362},{\"DBID\":566,\"score\":0.7849362},{\"DBID\":521,\"score\":0.3540957},{\"DBID\":514,\"score\":0.33025497},{\"DBID\":420,\"score\":0.32440513},{\"DBID\":415,\"score\":0.2780319}]}," + "\"spellcheck\":{\"searchInsteadFor\":\"alfresco\"}," + "\"facet_counts\":{\"facet_fields\":{\"creator\":[\"System\",124,\"mjackson\",11,\"abeecher\",4],\"modifier\":[\"System\",124,\"mjackson\",8,\"admin\",7]}}," + "\"processedDenies\":true, \"lastIndexedTx\":34}";
    results = mockResultset(expectedResponse);
    searchQuery = helper.extractFromJson(jsonQuery);
    searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
    assertFalse(searchContext.getFacetsFields().isEmpty());
    assertTrue(searchContext.getFacets().isEmpty());
    assertEquals("creator", searchContext.getFacetsFields().get(0).getLabel());
    assertEquals(3, searchContext.getFacetsFields().get(0).getBuckets().size());
    assertEquals(124, searchContext.getFacetsFields().get(0).getBuckets().get(0).getCount());
    assertEquals("creator:\"System\"", searchContext.getFacetsFields().get(0).getBuckets().get(0).getFilterQuery());
    assertEquals("System", searchContext.getFacetsFields().get(0).getBuckets().get(0).getLabel());
    assertEquals("modifier", searchContext.getFacetsFields().get(1).getLabel());
    jsonQuery = jsonQuery.replace("V1", "V2");
    searchQuery = helper.extractFromJson(jsonQuery);
    searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
    assertTrue(searchContext.getFacetsFields().isEmpty());
    assertFalse(searchContext.getFacets().isEmpty());
    assertEquals("creator", searchContext.getFacets().get(0).getLabel());
    assertEquals(3, searchContext.getFacets().get(0).getBuckets().size());
    metrics = searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().toArray(new Metric[searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().size()]);
    assertEquals("{count=124}", metrics[0].getValue().toString());
    assertEquals("creator:\"System\"", searchContext.getFacets().get(0).getBuckets().get(0).getFilterQuery());
    assertEquals("System", searchContext.getFacets().get(0).getBuckets().get(0).getLabel());
    assertEquals("modifier", searchContext.getFacets().get(1).getLabel());
}
Also used : SearchQuery(org.alfresco.rest.api.search.model.SearchQuery) ResultSet(org.alfresco.service.cmr.search.ResultSet) EmptyResultSet(org.alfresco.repo.search.EmptyResultSet) SolrJSONResultSet(org.alfresco.repo.search.impl.lucene.SolrJSONResultSet) SearchContext(org.alfresco.rest.api.search.context.SearchContext) PercentileMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.PercentileMetric) Metric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric) SimpleMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.SimpleMetric) ListMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.ListMetric) Matchers.anyString(org.mockito.Matchers.anyString) SolrJSONResultSet(org.alfresco.repo.search.impl.lucene.SolrJSONResultSet) SearchRequestContext(org.alfresco.rest.api.search.context.SearchRequestContext) Test(org.junit.Test)

Example 17 with SearchQuery

use of org.alfresco.rest.api.search.model.SearchQuery in project alfresco-remote-api by Alfresco.

the class ResultMapperTests method testFacetingWithPartialGroup.

@Test
public /**
 *  When the following is passed
 * "facetQueries": [
 *       {"query": "content.size:[0 TO 102400]", "label": "small", "group": "one"},
 *       {"query": "content.size:[102400 TO 1048576]", "label": "medium", "group": "two"},
 *       {"query": "content.size:[1048576 TO 16777216]", "label": "large"}
 *  We expect to see 3 groups of 1,2,null.
 * @throws Exception
 */
void testFacetingWithPartialGroup() throws Exception {
    String jsonQuery = "{\"query\": {\"query\": \"alfresco\"}," + "\"facetQueries\": [" + "{\"query\": \"content.size:[o TO 102400]\", \"label\": \"small\",\"group\":\"1\"}," + "{\"query\": \"content.size:[102400 TO 1048576]\", \"label\": \"medium\",\"group\":\"2\"}," + "{\"query\": \"content.size:[1048576 TO 16777216]\", \"label\": \"large\"}]" + "}";
    String expectedResponse = "{\"responseHeader\":{\"status\":0,\"QTime\":9},\"_original_parameters_\":\"org.apache.solr.common.params.DefaultSolrParams:{params(df=TEXT&alternativeDic=DEFAULT_DICTIONARY&fl=DBID,score&start=0&fq={!afts}AUTHORITY_FILTER_FROM_JSON&fq={!afts}TENANT_FILTER_FROM_JSON&rows=1000&locale=en_US&wt=json),defaults(carrot.url=id&spellcheck.collateExtendedResults=true&carrot.produceSummary=true&spellcheck.maxCollations=3&spellcheck.maxCollationTries=5&spellcheck.alternativeTermCount=2&spellcheck.extendedResults=false&defType=afts&spellcheck.maxResultsForSuggest=5&spellcheck=false&carrot.outputSubClusters=false&spellcheck.count=5&carrot.title=mltext@m___t@{http://www.alfresco.org/model/content/1.0}title&carrot.snippet=content@s___t@{http://www.alfresco.org/model/content/1.0}content&spellcheck.collate=true)}\",\"_field_mappings_\":{},\"_date_mappings_\":{},\"_range_mappings_\":{},\"_pivot_mappings_\":{},\"_interval_mappings_\":{},\"_stats_field_mappings_\":{},\"_stats_facet_mappings_\":{},\"_facet_function_mappings_\":{},\"response\":{\"numFound\":6,\"start\":0,\"maxScore\":0.7849362,\"docs\":[{\"DBID\":565,\"score\":0.7849362},{\"DBID\":566,\"score\":0.7849362},{\"DBID\":521,\"score\":0.3540957},{\"DBID\":514,\"score\":0.33025497},{\"DBID\":420,\"score\":0.32440513},{\"DBID\":415,\"score\":0.2780319}]}," + "\"spellcheck\":{\"searchInsteadFor\":\"alfresco\"}," + "\"facet_counts\":{\"facet_queries\": {\"small\": 52,\"large\": 0,\"medium\": 0}}," + "\"processedDenies\":true, \"lastIndexedTx\":34}";
    ResultSet results = mockResultset(expectedResponse);
    SearchQuery searchQuery = helper.extractFromJson(jsonQuery);
    SearchRequestContext searchRequest = SearchRequestContext.from(searchQuery);
    SearchContext searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
    assertEquals(34l, searchContext.getConsistency().getlastTxId());
    assertEquals(null, searchContext.getFacetQueries());
    assertEquals(3, searchContext.getFacets().size());
    assertEquals(1, searchContext.getFacets().get(0).getBuckets().size());
    assertEquals(1, searchContext.getFacets().get(1).getBuckets().size());
    assertEquals(1, searchContext.getFacets().get(2).getBuckets().size());
    assertEquals("large", searchContext.getFacets().get(0).getBuckets().get(0).getLabel());
    assertEquals("small", searchContext.getFacets().get(1).getBuckets().get(0).getLabel());
    assertEquals("medium", searchContext.getFacets().get(2).getBuckets().get(0).getLabel());
    assertEquals("content.size:[o TO 102400]", searchContext.getFacets().get(1).getBuckets().get(0).getFilterQuery());
    assertFalse(searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().isEmpty());
    Metric[] metrics = searchContext.getFacets().get(1).getBuckets().get(0).getMetrics().toArray(new Metric[searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().size()]);
    assertEquals(METRIC_TYPE.count, metrics[0].getType());
    assertEquals("{count=52}", metrics[0].getValue().toString());
}
Also used : SearchQuery(org.alfresco.rest.api.search.model.SearchQuery) ResultSet(org.alfresco.service.cmr.search.ResultSet) EmptyResultSet(org.alfresco.repo.search.EmptyResultSet) SolrJSONResultSet(org.alfresco.repo.search.impl.lucene.SolrJSONResultSet) SearchContext(org.alfresco.rest.api.search.context.SearchContext) PercentileMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.PercentileMetric) Metric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric) SimpleMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.SimpleMetric) ListMetric(org.alfresco.repo.search.impl.solr.facet.facetsresponse.ListMetric) Matchers.anyString(org.mockito.Matchers.anyString) SearchRequestContext(org.alfresco.rest.api.search.context.SearchRequestContext) Test(org.junit.Test)

Example 18 with SearchQuery

use of org.alfresco.rest.api.search.model.SearchQuery in project alfresco-remote-api by Alfresco.

the class SearchMapperTests method facetFormatV2.

@Test
public void facetFormatV2() {
    Query query = new Query("afts", "a*", "");
    SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, FacetFormat.V2);
    SearchRequestContext searchRequestContext = SearchRequestContext.from(sq);
    SearchParameters searchParameters = searchMapper.toSearchParameters(ResultMapperTests.EMPTY_PARAMS, sq, searchRequestContext);
    assertNotNull(searchParameters);
    // Test defaults
    assertEquals("There should be only 1 default store", 1, searchParameters.getStores().size());
    assertEquals("workspaces store is the default", StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, searchParameters.getStores().get(0));
    assertEquals(LimitBy.FINAL_SIZE, searchParameters.getLimitBy());
    assertEquals(100, searchParameters.getLimit());
}
Also used : SearchQuery(org.alfresco.rest.api.search.model.SearchQuery) SearchParameters(org.alfresco.service.cmr.search.SearchParameters) FacetQuery(org.alfresco.rest.api.search.model.FacetQuery) FilterQuery(org.alfresco.rest.api.search.model.FilterQuery) Query(org.alfresco.rest.api.search.model.Query) SearchQuery(org.alfresco.rest.api.search.model.SearchQuery) SearchRequestContext(org.alfresco.rest.api.search.context.SearchRequestContext) Test(org.junit.Test)

Example 19 with SearchQuery

use of org.alfresco.rest.api.search.model.SearchQuery in project alfresco-remote-api by Alfresco.

the class SearchMapperTests method minimalQuery.

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, null, null, null, null, null, null);
    return sq;
}
Also used : SearchQuery(org.alfresco.rest.api.search.model.SearchQuery) FacetQuery(org.alfresco.rest.api.search.model.FacetQuery) FilterQuery(org.alfresco.rest.api.search.model.FilterQuery) Query(org.alfresco.rest.api.search.model.Query) SearchQuery(org.alfresco.rest.api.search.model.SearchQuery)

Aggregations

SearchQuery (org.alfresco.rest.api.search.model.SearchQuery)19 SearchRequestContext (org.alfresco.rest.api.search.context.SearchRequestContext)16 ResultSet (org.alfresco.service.cmr.search.ResultSet)15 SolrJSONResultSet (org.alfresco.repo.search.impl.lucene.SolrJSONResultSet)14 SearchContext (org.alfresco.rest.api.search.context.SearchContext)14 Metric (org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric)13 SimpleMetric (org.alfresco.repo.search.impl.solr.facet.facetsresponse.SimpleMetric)13 Test (org.junit.Test)12 Node (org.alfresco.rest.api.model.Node)10 Params (org.alfresco.rest.framework.resource.parameters.Params)10 Serializable (java.io.Serializable)9 ArrayList (java.util.ArrayList)9 Arrays (java.util.Arrays)9 Collections (java.util.Collections)9 HashMap (java.util.HashMap)9 List (java.util.List)9 Map (java.util.Map)9 Set (java.util.Set)9 Collectors (java.util.stream.Collectors)9 EmptyResultSet (org.alfresco.repo.search.EmptyResultSet)9