This is an automated email from the ASF dual-hosted git repository. nixon pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/atlas.git
commit bc685f22cd9ede632f955d34558e42de0044e247 Author: Pinal Shah <[email protected]> AuthorDate: Fri Feb 21 10:41:08 2020 +0530 ATLAS-3615 :- Basic Search : Search with _ALL_ENTITY_TYPES and classification doesn't not fetch any entity associated to that classification Signed-off-by: nixonrodrigues <[email protected]> (cherry picked from commit 75e678da7595420a729226e9ce2b575facb7bbb5) --- .../apache/atlas/discovery/ClassificationSearchProcessor.java | 10 +++++++--- .../java/org/apache/atlas/discovery/EntitySearchProcessor.java | 5 +++-- .../org/apache/atlas/discovery/FreeTextSearchProcessor.java | 5 +++-- .../main/java/org/apache/atlas/discovery/SearchContext.java | 6 +++--- .../main/java/org/apache/atlas/discovery/SearchProcessor.java | 7 ++++--- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java index c0a5a46..6ab0afb 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java @@ -191,9 +191,13 @@ public class ClassificationSearchProcessor extends SearchProcessor { if (!isWildcardSearch && !isBuiltInType && !graphAttributes.isEmpty()) { AtlasGremlinQueryProvider queryProvider = AtlasGremlinQueryProvider.INSTANCE; + AtlasGraphQuery query = graph.query(); - tagGraphQueryWithAttributes = toGraphFilterQuery(classificationType, filterCriteria, allAttributes, - graph.query().in(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes)); + if (!isClassificationRootType()) { + query.in(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes); + } + + tagGraphQueryWithAttributes = toGraphFilterQuery(classificationType, filterCriteria, allAttributes, query); gremlinQueryBindings = new HashMap<>(); StringBuilder gremlinQuery = new StringBuilder(); @@ -300,7 +304,7 @@ public class ClassificationSearchProcessor extends SearchProcessor { // vertex results (as these might be lower in number) if (CollectionUtils.isNotEmpty(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) { AtlasVertex entityVertex = edge.getOutVertex(); diff --git a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java index b5606d0..8f53187 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java @@ -44,6 +44,7 @@ import java.util.List; import java.util.Set; 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_NOT_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION; @@ -145,7 +146,7 @@ public class EntitySearchProcessor extends SearchProcessor { if (CollectionUtils.isNotEmpty(graphAttributes) || !typeSearchByIndex) { AtlasGraphQuery query = context.getGraph().query(); - if (!typeSearchByIndex) { + if (!typeSearchByIndex && !isEntityRootType()) { query.in(TYPE_NAME_PROPERTY_KEY, typeAndSubTypes); } @@ -153,7 +154,7 @@ public class EntitySearchProcessor extends SearchProcessor { if (filterClassification) { 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(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null)); } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { diff --git a/repository/src/main/java/org/apache/atlas/discovery/FreeTextSearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/FreeTextSearchProcessor.java index d628f13..92b5eb4 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/FreeTextSearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/FreeTextSearchProcessor.java @@ -24,6 +24,7 @@ import org.apache.atlas.repository.graph.GraphHelper; import org.apache.atlas.repository.graphdb.*; import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2; import org.apache.atlas.utils.AtlasPerfTracer; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.solr.common.params.CommonParams; import org.slf4j.Logger; @@ -52,11 +53,11 @@ public class FreeTextSearchProcessor extends SearchProcessor { 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()); } - 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()); } diff --git a/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java b/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java index 3534113..2c2888e 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java +++ b/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java @@ -120,7 +120,7 @@ public class SearchContext { if (classificationType != null && !isBuiltInClassificationType()) { if (classificationType == MATCH_ALL_CLASSIFICATION_TYPES) { - classificationTypeAndSubTypes = Collections.singleton(ALL_TYPE_QUERY); + classificationTypeAndSubTypes = Collections.emptySet(); classificationTypeAndSubTypesQryStr = ALL_TYPE_QUERY; } else { classificationTypeAndSubTypes = searchParameters.getIncludeSubClassifications() ? classificationType.getTypeAndAllSubTypes() : Collections.singleton(classificationType.getTypeName()); @@ -133,7 +133,7 @@ public class SearchContext { if (entityType != null) { if (entityType.equals(MATCH_ALL_ENTITY_TYPES)) { - typeAndSubTypes = Collections.singleton(ALL_TYPE_QUERY); + typeAndSubTypes = Collections.emptySet(); typeAndSubTypesQryStr = ALL_TYPE_QUERY; } else { typeAndSubTypes = searchParameters.getIncludeSubTypes() ? entityType.getTypeAndAllSubTypes() : Collections.singleton(entityType.getTypeName()); @@ -202,7 +202,7 @@ public class SearchContext { public boolean includeClassificationTypes(Collection<String> classificationTypes) { final boolean ret; - if (classificationType == null) { + if (classificationType == null || classificationTypeAndSubTypes.isEmpty()) { ret = true; } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { ret = CollectionUtils.isEmpty(classificationTypes); diff --git a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java index 8c17a90..356363d 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java @@ -46,6 +46,7 @@ import java.math.BigInteger; import java.util.*; 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_NOT_CLASSIFIED; import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_WILDCARD_CLASSIFICATION; @@ -189,7 +190,7 @@ public abstract class SearchProcessor { protected Predicate buildTraitPredict(AtlasClassificationType classificationType) { 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), SearchPredicateUtil.getNotEmptyPredicateGenerator().generatePredicate(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, null, List.class)); } else if (classificationType == MATCH_ALL_NOT_CLASSIFIED) { @@ -297,7 +298,7 @@ public abstract class SearchProcessor { List<String> classificationNames = AtlasGraphUtilsV2.getClassificationNames(entityVertex); if (CollectionUtils.isNotEmpty(classificationNames)) { - if (CollectionUtils.containsAny(classificationNames, typeAndSubTypes)) { + if (typeAndSubTypes.isEmpty() || CollectionUtils.containsAny(classificationNames, typeAndSubTypes)) { continue; } } @@ -305,7 +306,7 @@ public abstract class SearchProcessor { List<String> propagatedClassificationNames = AtlasGraphUtilsV2.getPropagatedClassificationNames(entityVertex); if (CollectionUtils.isNotEmpty(propagatedClassificationNames)) { - if (CollectionUtils.containsAny(propagatedClassificationNames, typeAndSubTypes)) { + if (typeAndSubTypes.isEmpty() || CollectionUtils.containsAny(propagatedClassificationNames, typeAndSubTypes)) { continue; } }
