ATLAS-4422 : Quick Search: Provide sorting

Signed-off-by: Pinal Shah <pinal.shah@freestoneinfotech.com>
This commit is contained in:
Pinal Shah 2021-09-13 23:51:50 +05:30
parent 953f65b9c4
commit 98b43fc9d7
4 changed files with 79 additions and 7 deletions

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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);