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