ATLAS-4422 : Quick Search: Provide sorting
Signed-off-by: Pinal Shah <pinal.shah@freestoneinfotech.com>
This commit is contained in:
parent
953f65b9c4
commit
98b43fc9d7
|
|
@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
import org.apache.atlas.SortOrder;
|
||||
import org.apache.atlas.model.discovery.SearchParameters.FilterCriteria;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -47,6 +48,8 @@ public class QuickSearchParameters implements Serializable {
|
|||
private int offset;
|
||||
private int limit;
|
||||
private Set<String> attributes;
|
||||
private String sortBy;
|
||||
private SortOrder sortOrder;
|
||||
|
||||
/**
|
||||
* for framework use.
|
||||
|
|
@ -61,7 +64,9 @@ public class QuickSearchParameters implements Serializable {
|
|||
boolean excludeDeletedEntities,
|
||||
int offset,
|
||||
int limit,
|
||||
Set<String> attributes) {
|
||||
Set<String> attributes,
|
||||
String sortBy,
|
||||
SortOrder sortOrder) {
|
||||
this.query = query;
|
||||
this.typeName = typeName;
|
||||
this.entityFilters = entityFilters;
|
||||
|
|
@ -70,6 +75,8 @@ public class QuickSearchParameters implements Serializable {
|
|||
this.offset = offset;
|
||||
this.limit = limit;
|
||||
this.attributes = attributes;
|
||||
this.sortBy = sortBy;
|
||||
this.sortOrder = sortOrder;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
|
|
@ -135,4 +142,20 @@ public class QuickSearchParameters implements Serializable {
|
|||
public void setAttributes(Set<String> attributes) {
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
public String getSortBy() {
|
||||
return sortBy;
|
||||
}
|
||||
|
||||
public void setSortBy(String sortBy) {
|
||||
this.sortBy = sortBy;
|
||||
}
|
||||
|
||||
public SortOrder getSortOrder() {
|
||||
return sortOrder;
|
||||
}
|
||||
|
||||
public void setSortOrder(SortOrder sortOrder) {
|
||||
this.sortOrder = sortOrder;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -920,6 +920,8 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
|
|||
searchParameters.setOffset(quickSearchParameters.getOffset());
|
||||
searchParameters.setEntityFilters(quickSearchParameters.getEntityFilters());
|
||||
searchParameters.setAttributes(quickSearchParameters.getAttributes());
|
||||
searchParameters.setSortBy(quickSearchParameters.getSortBy());
|
||||
searchParameters.setSortOrder(quickSearchParameters.getSortOrder());
|
||||
|
||||
return searchParameters;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -858,6 +858,44 @@ public class AtlasDiscoveryServiceTest extends BasicTestSetup {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchWithEntityQuickSearchSortAsc() throws AtlasBaseException {
|
||||
QuickSearchParameters params = new QuickSearchParameters();
|
||||
params.setTypeName("hive_table");
|
||||
params.setQuery("sales");
|
||||
params.setExcludeDeletedEntities(true);
|
||||
params.setLimit(3);
|
||||
params.setSortBy("owner");
|
||||
params.setSortOrder(SortOrder.ASCENDING);
|
||||
|
||||
AtlasQuickSearchResult searchResult = discoveryService.quickSearch(params);
|
||||
List<AtlasEntityHeader> list = searchResult.getSearchResults().getEntities();
|
||||
|
||||
Assert.assertTrue(CollectionUtils.isNotEmpty(list));
|
||||
Assert.assertTrue(list.size() == 3);
|
||||
Assert.assertTrue(list.get(0).getAttribute("owner").toString().equalsIgnoreCase("Jane BI"));
|
||||
Assert.assertTrue(list.get(1).getAttribute("owner").toString().equalsIgnoreCase("Joe"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchWithEntityQuickSearchSortDesc() throws AtlasBaseException {
|
||||
QuickSearchParameters params = new QuickSearchParameters();
|
||||
params.setTypeName("hive_table");
|
||||
params.setQuery("sales");
|
||||
params.setExcludeDeletedEntities(true);
|
||||
params.setLimit(3);
|
||||
params.setSortBy("name");
|
||||
params.setSortOrder(SortOrder.DESCENDING);
|
||||
|
||||
AtlasQuickSearchResult searchResult = discoveryService.quickSearch(params);
|
||||
List<AtlasEntityHeader> list = searchResult.getSearchResults().getEntities();
|
||||
|
||||
Assert.assertTrue(CollectionUtils.isNotEmpty(list));
|
||||
Assert.assertTrue(list.size() == 3);
|
||||
Assert.assertTrue(list.get(0).getDisplayText().equalsIgnoreCase("time_dim"));
|
||||
Assert.assertTrue(list.get(1).getDisplayText().equalsIgnoreCase("sales_fact_monthly_mv"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchRelatedEntitiesSortAsc() throws AtlasBaseException {
|
||||
String guid = gethiveTableSalesFactGuid();
|
||||
|
|
|
|||
|
|
@ -606,11 +606,13 @@ public class DiscoveryREST {
|
|||
@Path("/quick")
|
||||
@GET
|
||||
@Timed
|
||||
public AtlasQuickSearchResult quickSearch(@QueryParam("query") String query,
|
||||
@QueryParam("typeName") String typeName,
|
||||
@QueryParam("excludeDeletedEntities") boolean excludeDeletedEntities,
|
||||
@QueryParam("offset") int offset,
|
||||
@QueryParam("limit") int limit) throws AtlasBaseException {
|
||||
public AtlasQuickSearchResult quickSearch(@QueryParam("query") String query,
|
||||
@QueryParam("typeName") String typeName,
|
||||
@QueryParam("excludeDeletedEntities") boolean excludeDeletedEntities,
|
||||
@QueryParam("offset") int offset,
|
||||
@QueryParam("limit") int limit,
|
||||
@QueryParam("sortBy") String sortByAttribute,
|
||||
@QueryParam("sortOrder") SortOrder sortOrder) throws AtlasBaseException {
|
||||
|
||||
|
||||
|
||||
|
|
@ -633,7 +635,9 @@ public class DiscoveryREST {
|
|||
excludeDeletedEntities,
|
||||
offset,
|
||||
limit,
|
||||
null); // attributes
|
||||
null, // attributes
|
||||
sortByAttribute,
|
||||
sortOrder);
|
||||
|
||||
return discoveryService.quickSearch(quickSearchParameters);
|
||||
} finally {
|
||||
|
|
@ -673,6 +677,11 @@ public class DiscoveryREST {
|
|||
throw new AtlasBaseException(AtlasErrorCode.INVALID_SEARCH_PARAMS);
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(quickSearchParameters.getTypeName()) &&
|
||||
(StringUtils.isNotEmpty(quickSearchParameters.getSortBy()))) {
|
||||
throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "SortBy specified without Type name");
|
||||
}
|
||||
|
||||
validateSearchParameters(quickSearchParameters);
|
||||
|
||||
return discoveryService.quickSearch(quickSearchParameters);
|
||||
|
|
|
|||
Loading…
Reference in New Issue