Commit 75e678da by Pinal Shah Committed by nixonrodrigues

ATLAS-3615 :- Basic Search : Search with _ALL_ENTITY_TYPES and classification…

ATLAS-3615 :- Basic Search : Search with _ALL_ENTITY_TYPES and classification doesn't not fetch any entity associated to that classification Signed-off-by: 's avatarnixonrodrigues <nixon@apache.org>
parent 6b503eeb
...@@ -191,9 +191,13 @@ public class ClassificationSearchProcessor extends SearchProcessor { ...@@ -191,9 +191,13 @@ public class ClassificationSearchProcessor extends SearchProcessor {
if (!isWildcardSearch && !isBuiltInType && !graphAttributes.isEmpty()) { if (!isWildcardSearch && !isBuiltInType && !graphAttributes.isEmpty()) {
AtlasGremlinQueryProvider queryProvider = AtlasGremlinQueryProvider.INSTANCE; AtlasGremlinQueryProvider queryProvider = AtlasGremlinQueryProvider.INSTANCE;
AtlasGraphQuery query = graph.query();
tagGraphQueryWithAttributes = toGraphFilterQuery(classificationType, filterCriteria, allAttributes, if (!isClassificationRootType()) {
graph.query().in(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes)); query.in(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes);
}
tagGraphQueryWithAttributes = toGraphFilterQuery(classificationType, filterCriteria, allAttributes, query);
gremlinQueryBindings = new HashMap<>(); gremlinQueryBindings = new HashMap<>();
StringBuilder gremlinQuery = new StringBuilder(); StringBuilder gremlinQuery = new StringBuilder();
...@@ -300,7 +304,7 @@ public class ClassificationSearchProcessor extends SearchProcessor { ...@@ -300,7 +304,7 @@ public class ClassificationSearchProcessor extends SearchProcessor {
// vertex results (as these might be lower in number) // vertex results (as these might be lower in number)
if (CollectionUtils.isNotEmpty(classificationVertices)) { if (CollectionUtils.isNotEmpty(classificationVertices)) {
for (AtlasVertex classificationVertex : classificationVertices) { for (AtlasVertex classificationVertex : classificationVertices) {
Iterable<AtlasEdge> edges = classificationVertex.getEdges(AtlasEdgeDirection.IN); Iterable<AtlasEdge> edges = classificationVertex.getEdges(AtlasEdgeDirection.IN, Constants.CLASSIFICATION_LABEL);
for (AtlasEdge edge : edges) { for (AtlasEdge edge : edges) {
AtlasVertex entityVertex = edge.getOutVertex(); AtlasVertex entityVertex = edge.getOutVertex();
......
...@@ -44,6 +44,7 @@ import java.util.List; ...@@ -44,6 +44,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import static org.apache.atlas.SortOrder.ASCENDING; import static org.apache.atlas.SortOrder.ASCENDING;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFICATION_TYPES;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFIED;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_NOT_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_NOT_CLASSIFIED;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION;
...@@ -145,7 +146,7 @@ public class EntitySearchProcessor extends SearchProcessor { ...@@ -145,7 +146,7 @@ public class EntitySearchProcessor extends SearchProcessor {
if (CollectionUtils.isNotEmpty(graphAttributes) || !typeSearchByIndex) { if (CollectionUtils.isNotEmpty(graphAttributes) || !typeSearchByIndex) {
AtlasGraphQuery query = context.getGraph().query(); AtlasGraphQuery query = context.getGraph().query();
if (!typeSearchByIndex) { if (!typeSearchByIndex && !isEntityRootType()) {
query.in(TYPE_NAME_PROPERTY_KEY, typeAndSubTypes); query.in(TYPE_NAME_PROPERTY_KEY, typeAndSubTypes);
} }
...@@ -153,7 +154,7 @@ public class EntitySearchProcessor extends SearchProcessor { ...@@ -153,7 +154,7 @@ public class EntitySearchProcessor extends SearchProcessor {
if (filterClassification) { if (filterClassification) {
List<AtlasGraphQuery> orConditions = new LinkedList<>(); List<AtlasGraphQuery> orConditions = new LinkedList<>();
if (classificationType == MATCH_ALL_WILDCARD_CLASSIFICATION || classificationType == MATCH_ALL_CLASSIFIED) { if (classificationType == MATCH_ALL_WILDCARD_CLASSIFICATION || classificationType == MATCH_ALL_CLASSIFIED || classificationType == MATCH_ALL_CLASSIFICATION_TYPES) {
orConditions.add(query.createChildQuery().has(TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null)); orConditions.add(query.createChildQuery().has(TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null));
orConditions.add(query.createChildQuery().has(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null)); orConditions.add(query.createChildQuery().has(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null));
} else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) {
......
...@@ -24,6 +24,7 @@ import org.apache.atlas.repository.graph.GraphHelper; ...@@ -24,6 +24,7 @@ import org.apache.atlas.repository.graph.GraphHelper;
import org.apache.atlas.repository.graphdb.*; import org.apache.atlas.repository.graphdb.*;
import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2; import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
import org.apache.atlas.utils.AtlasPerfTracer; import org.apache.atlas.utils.AtlasPerfTracer;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.solr.common.params.CommonParams; import org.apache.solr.common.params.CommonParams;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -52,11 +53,11 @@ public class FreeTextSearchProcessor extends SearchProcessor { ...@@ -52,11 +53,11 @@ public class FreeTextSearchProcessor extends SearchProcessor {
queryString.append(searchParameters.getQuery()); queryString.append(searchParameters.getQuery());
if (StringUtils.isNotEmpty(context.getEntityTypesQryStr()) && context.getEntityTypesQryStr().length() <= MAX_QUERY_STR_LENGTH_TYPES) { if (CollectionUtils.isNotEmpty(context.getEntityTypes()) && context.getEntityTypesQryStr().length() <= MAX_QUERY_STR_LENGTH_TYPES) {
queryString.append(AND_STR).append(context.getEntityTypesQryStr()); queryString.append(AND_STR).append(context.getEntityTypesQryStr());
} }
if (StringUtils.isNotEmpty(context.getClassificationTypesQryStr()) && context.getClassificationTypesQryStr().length() <= MAX_QUERY_STR_LENGTH_TYPES) { if (CollectionUtils.isNotEmpty(context.getClassificationTypes()) && context.getClassificationTypesQryStr().length() <= MAX_QUERY_STR_LENGTH_TYPES) {
queryString.append(AND_STR).append(context.getClassificationTypesQryStr()); queryString.append(AND_STR).append(context.getClassificationTypesQryStr());
} }
......
...@@ -120,7 +120,7 @@ public class SearchContext { ...@@ -120,7 +120,7 @@ public class SearchContext {
if (classificationType != null && !isBuiltInClassificationType()) { if (classificationType != null && !isBuiltInClassificationType()) {
if (classificationType == MATCH_ALL_CLASSIFICATION_TYPES) { if (classificationType == MATCH_ALL_CLASSIFICATION_TYPES) {
classificationTypeAndSubTypes = Collections.singleton(ALL_TYPE_QUERY); classificationTypeAndSubTypes = Collections.emptySet();
classificationTypeAndSubTypesQryStr = ALL_TYPE_QUERY; classificationTypeAndSubTypesQryStr = ALL_TYPE_QUERY;
} else { } else {
classificationTypeAndSubTypes = searchParameters.getIncludeSubClassifications() ? classificationType.getTypeAndAllSubTypes() : Collections.singleton(classificationType.getTypeName()); classificationTypeAndSubTypes = searchParameters.getIncludeSubClassifications() ? classificationType.getTypeAndAllSubTypes() : Collections.singleton(classificationType.getTypeName());
...@@ -133,7 +133,7 @@ public class SearchContext { ...@@ -133,7 +133,7 @@ public class SearchContext {
if (entityType != null) { if (entityType != null) {
if (entityType.equals(MATCH_ALL_ENTITY_TYPES)) { if (entityType.equals(MATCH_ALL_ENTITY_TYPES)) {
typeAndSubTypes = Collections.singleton(ALL_TYPE_QUERY); typeAndSubTypes = Collections.emptySet();
typeAndSubTypesQryStr = ALL_TYPE_QUERY; typeAndSubTypesQryStr = ALL_TYPE_QUERY;
} else { } else {
typeAndSubTypes = searchParameters.getIncludeSubTypes() ? entityType.getTypeAndAllSubTypes() : Collections.singleton(entityType.getTypeName()); typeAndSubTypes = searchParameters.getIncludeSubTypes() ? entityType.getTypeAndAllSubTypes() : Collections.singleton(entityType.getTypeName());
...@@ -202,7 +202,7 @@ public class SearchContext { ...@@ -202,7 +202,7 @@ public class SearchContext {
public boolean includeClassificationTypes(Collection<String> classificationTypes) { public boolean includeClassificationTypes(Collection<String> classificationTypes) {
final boolean ret; final boolean ret;
if (classificationType == null) { if (classificationType == null || classificationTypeAndSubTypes.isEmpty()) {
ret = true; ret = true;
} else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) {
ret = CollectionUtils.isEmpty(classificationTypes); ret = CollectionUtils.isEmpty(classificationTypes);
......
...@@ -46,6 +46,7 @@ import java.math.BigInteger; ...@@ -46,6 +46,7 @@ import java.math.BigInteger;
import java.util.*; import java.util.*;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFICATION_TYPES;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFIED;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_NOT_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_NOT_CLASSIFIED;
import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION;
...@@ -189,7 +190,7 @@ public abstract class SearchProcessor { ...@@ -189,7 +190,7 @@ public abstract class SearchProcessor {
protected Predicate buildTraitPredict(AtlasClassificationType classificationType) { protected Predicate buildTraitPredict(AtlasClassificationType classificationType) {
Predicate traitPredicate; Predicate traitPredicate;
if (classificationType == MATCH_ALL_WILDCARD_CLASSIFICATION || classificationType == MATCH_ALL_CLASSIFIED || context.isWildCardSearch()) { if (classificationType == MATCH_ALL_WILDCARD_CLASSIFICATION || classificationType == MATCH_ALL_CLASSIFIED || context.isWildCardSearch() || classificationType == MATCH_ALL_CLASSIFICATION_TYPES) {
traitPredicate = PredicateUtils.orPredicate(SearchPredicateUtil.getNotEmptyPredicateGenerator().generatePredicate(TRAIT_NAMES_PROPERTY_KEY, null, List.class), traitPredicate = PredicateUtils.orPredicate(SearchPredicateUtil.getNotEmptyPredicateGenerator().generatePredicate(TRAIT_NAMES_PROPERTY_KEY, null, List.class),
SearchPredicateUtil.getNotEmptyPredicateGenerator().generatePredicate(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, null, List.class)); SearchPredicateUtil.getNotEmptyPredicateGenerator().generatePredicate(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, null, List.class));
} else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) {
...@@ -297,7 +298,7 @@ public abstract class SearchProcessor { ...@@ -297,7 +298,7 @@ public abstract class SearchProcessor {
List<String> classificationNames = AtlasGraphUtilsV2.getClassificationNames(entityVertex); List<String> classificationNames = AtlasGraphUtilsV2.getClassificationNames(entityVertex);
if (CollectionUtils.isNotEmpty(classificationNames)) { if (CollectionUtils.isNotEmpty(classificationNames)) {
if (CollectionUtils.containsAny(classificationNames, typeAndSubTypes)) { if (typeAndSubTypes.isEmpty() || CollectionUtils.containsAny(classificationNames, typeAndSubTypes)) {
continue; continue;
} }
} }
...@@ -305,7 +306,7 @@ public abstract class SearchProcessor { ...@@ -305,7 +306,7 @@ public abstract class SearchProcessor {
List<String> propagatedClassificationNames = AtlasGraphUtilsV2.getPropagatedClassificationNames(entityVertex); List<String> propagatedClassificationNames = AtlasGraphUtilsV2.getPropagatedClassificationNames(entityVertex);
if (CollectionUtils.isNotEmpty(propagatedClassificationNames)) { if (CollectionUtils.isNotEmpty(propagatedClassificationNames)) {
if (CollectionUtils.containsAny(propagatedClassificationNames, typeAndSubTypes)) { if (typeAndSubTypes.isEmpty() || CollectionUtils.containsAny(propagatedClassificationNames, typeAndSubTypes)) {
continue; continue;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment