You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2020/03/23 05:22:43 UTC

[atlas] branch master updated: ATLAS-3675 Enable quick search and suggestions for business metadata attributes

This is an automated email from the ASF dual-hosted git repository.

sarath pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/master by this push:
     new df8502e  ATLAS-3675 Enable quick search and suggestions for business metadata attributes
df8502e is described below

commit df8502ea4962e95ad02a7e05b5bb1ae50ccd0bcb
Author: Mandar Ambawane <ma...@freestoneinfotech.com>
AuthorDate: Sat Mar 21 13:58:17 2020 +0530

    ATLAS-3675 Enable quick search and suggestions for business metadata attributes
    
    Signed-off-by: Sarath Subramanian <sa...@apache.org>
---
 .../org/apache/atlas/listener/ChangedTypeDefs.java | 21 +++++++++++++++++++++
 .../repository/graph/GraphBackedSearchIndexer.java | 10 ++++++++++
 .../atlas/repository/graph/SolrIndexHelper.java    | 22 ++++++++++++++++++++--
 3 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/intg/src/main/java/org/apache/atlas/listener/ChangedTypeDefs.java b/intg/src/main/java/org/apache/atlas/listener/ChangedTypeDefs.java
index af00f6c..58e889a 100644
--- a/intg/src/main/java/org/apache/atlas/listener/ChangedTypeDefs.java
+++ b/intg/src/main/java/org/apache/atlas/listener/ChangedTypeDefs.java
@@ -18,6 +18,7 @@
 package org.apache.atlas.listener;
 
 import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
+import org.apache.atlas.model.typedef.AtlasBusinessMetadataDef;
 import org.apache.atlas.model.typedef.AtlasEntityDef;
 import org.apache.commons.collections.CollectionUtils;
 
@@ -89,4 +90,24 @@ public class ChangedTypeDefs {
 
         return ret;
     }
+
+    public boolean hasBusinessMetadataDef() {
+        return hasBusinessMetadataDef(createdTypeDefs) || hasEntityDef(updatedTypeDefs) || hasEntityDef(deletedTypeDefs);
+    }
+
+    private boolean hasBusinessMetadataDef(List<? extends AtlasBaseTypeDef> typeDefs) {
+        boolean ret = false;
+
+        if (CollectionUtils.isNotEmpty(typeDefs)) {
+            for (AtlasBaseTypeDef typeDef : typeDefs) {
+                if (typeDef instanceof AtlasBusinessMetadataDef) {
+                    ret = true;
+
+                    break;
+                }
+            }
+        }
+
+        return ret;
+    }
 }
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
index 7c55130..647e304 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
@@ -377,6 +377,10 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
                 AtlasEntityType entityType = typeRegistry.getEntityTypeByName(baseTypeDef.getName());
 
                 resolveIndexFieldNames(managementSystem, entityType);
+            } else if(TypeCategory.BUSINESS_METADATA.equals(baseTypeDef.getCategory())) {
+                AtlasBusinessMetadataType businessMetadataType = typeRegistry.getBusinessMetadataTypeByName(baseTypeDef.getName());
+
+                resolveIndexFieldNames(managementSystem, businessMetadataType);
             } else {
                 LOG.debug("Ignoring the non-entity type definition {}", baseTypeDef.getName());
             }
@@ -389,6 +393,12 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
         }
     }
 
+    private void resolveIndexFieldNames(AtlasGraphManagement managementSystem, AtlasBusinessMetadataType businessMetadataType) {
+        for (AtlasAttribute attribute : businessMetadataType.getAllAttributes().values()) {
+            resolveIndexFieldName(managementSystem, attribute);
+        }
+    }
+
     private void resolveIndexFieldName(AtlasGraphManagement managementSystem, AtlasAttribute attribute) {
         try {
             if (attribute.getIndexFieldName() == null && TypeCategory.PRIMITIVE.equals(attribute.getAttributeType().getTypeCategory())) {
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java b/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
index 4ec0086..814b9f5 100644
--- a/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
@@ -23,6 +23,7 @@ import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
 import org.apache.atlas.repository.Constants;
 import org.apache.atlas.repository.graphdb.AtlasGraph;
 import org.apache.atlas.repository.graphdb.AtlasGraphIndexClient;
+import org.apache.atlas.type.AtlasBusinessMetadataType;
 import org.apache.atlas.type.AtlasEntityType;
 import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
 import org.apache.atlas.type.AtlasTypeRegistry;
@@ -67,7 +68,7 @@ public class SolrIndexHelper implements IndexChangeListener {
     @Override
     public void onChange(ChangedTypeDefs changedTypeDefs) {
         if (!AtlasRepositoryConfiguration.isFreeTextSearchEnabled() ||
-            changedTypeDefs == null || !changedTypeDefs.hasEntityDef()) { // nothing to do if there are no changes to entity-defs
+            changedTypeDefs == null || !(changedTypeDefs.hasEntityDef() || changedTypeDefs.hasBusinessMetadataDef())) { // nothing to do if there are no changes to entity-defs
             return;
         }
         if(initializationCompleted) {
@@ -119,6 +120,7 @@ public class SolrIndexHelper implements IndexChangeListener {
     private Map<String, Integer> geIndexFieldNamesWithSearchWeights() {
         Map<String, Integer>        ret         = new HashMap<>();
         Collection<AtlasEntityType> entityTypes = typeRegistry.getAllEntityTypes();
+        Collection<AtlasBusinessMetadataType> businessMetadataTypes = typeRegistry.getAllBusinessMetadataTypes();
 
         //the following properties are specially added manually.
         //as, they don't come in the entity definitions as attributes.
@@ -128,7 +130,7 @@ public class SolrIndexHelper implements IndexChangeListener {
         ret.put(typeRegistry.getIndexFieldName(CUSTOM_ATTRIBUTES_PROPERTY_KEY), SEARCHWEIGHT_FOR_CUSTOM_ATTRS);
         ret.put(typeRegistry.getIndexFieldName(TYPE_NAME_PROPERTY_KEY), SEARCHWEIGHT_FOR_TYPENAME);
 
-        if (!CollectionUtils.isNotEmpty(entityTypes)) {
+        if (!CollectionUtils.isNotEmpty(entityTypes) && CollectionUtils.isEmpty(businessMetadataTypes)) {
             return ret;
         }
 
@@ -140,9 +142,25 @@ public class SolrIndexHelper implements IndexChangeListener {
             processEntityType(ret, entityType);
         }
 
+        for(AtlasBusinessMetadataType businessMetadataType : businessMetadataTypes){
+            processBusinessMetadataType(ret, businessMetadataType);
+        }
+
         return ret;
     }
 
+    private void processBusinessMetadataType(Map<String, Integer> indexFieldNameWithSearchWeights, AtlasBusinessMetadataType businessMetadataType) {
+        List<AtlasAttributeDef> attributes = businessMetadataType.getBusinessMetadataDef().getAttributeDefs();
+
+        if (CollectionUtils.isNotEmpty(attributes)) {
+            for (AtlasAttributeDef attribute : attributes) {
+                processAttribute(indexFieldNameWithSearchWeights, businessMetadataType.getAttribute(attribute.getName()));
+            }
+        } else {
+            LOG.debug("No attributes are defined for BusinessMetadata {}", businessMetadataType.getTypeName());
+        }
+    }
+
     private void processEntityType(Map<String, Integer> indexFieldNameWithSearchWeights, AtlasEntityType entityType) {
         List<AtlasAttributeDef> attributes = entityType.getEntityDef().getAttributeDefs();