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

Reply via email to