This is an automated email from the ASF dual-hosted git repository.
nixon pushed a commit to branch branch-0.8
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/branch-0.8 by this push:
new 63e3d5c ATLAS-3816: Backport: Basic search issue with IndexSerializer
63e3d5c is described below
commit 63e3d5c9e5e74f1110d80c7bcfce970725504888
Author: Nikhil Bonte <[email protected]>
AuthorDate: Thu May 28 21:29:20 2020 +0530
ATLAS-3816: Backport: Basic search issue with IndexSerializer
Signed-off-by: nixonrodrigues <[email protected]>
---
.../org/apache/atlas/repository/Constants.java | 2 ++
.../repository/graphdb/titan0/Titan0Graph.java | 34 +++++++++++++++++-
.../repository/graphdb/titan1/Titan1Graph.java | 34 +++++++++++++++++-
.../atlas/discovery/EntityDiscoveryService.java | 7 ++--
.../atlas/discovery/FullTextSearchProcessor.java | 2 +-
.../apache/atlas/discovery/SearchProcessor.java | 41 +++++++++++-----------
.../graph/GraphBackedDiscoveryService.java | 4 ++-
.../store/graph/v1/AtlasGraphUtilsV1.java | 21 +++++++----
.../repository/graph/GraphRepoMapperScaleTest.java | 5 ++-
9 files changed, 117 insertions(+), 33 deletions(-)
diff --git a/common/src/main/java/org/apache/atlas/repository/Constants.java
b/common/src/main/java/org/apache/atlas/repository/Constants.java
index 4fa6dad..2ab4c03 100644
--- a/common/src/main/java/org/apache/atlas/repository/Constants.java
+++ b/common/src/main/java/org/apache/atlas/repository/Constants.java
@@ -94,6 +94,8 @@ public final class Constants {
public static final String INDEX_SEARCH_MAX_RESULT_SET_SIZE =
"atlas.graph.index.search.max-result-set-size";
public static final String INDEX_SEARCH_TYPES_MAX_QUERY_STR_LENGTH =
"atlas.graph.index.search.types.max-query-str-length";
public static final String INDEX_SEARCH_TAGS_MAX_QUERY_STR_LENGTH =
"atlas.graph.index.search.tags.max-query-str-length";
+ public static final String INDEX_SEARCH_VERTEX_PREFIX_PROPERTY =
"atlas.graph.index.search.vertex.prefix";
+ public static final String INDEX_SEARCH_VERTEX_PREFIX_DEFAULT = "$v$";
public static final String MAX_FULLTEXT_QUERY_STR_LENGTH =
"atlas.graph.fulltext-max-query-str-length";
public static final String MAX_DSL_QUERY_STR_LENGTH =
"atlas.graph.dsl-max-query-str-length";
diff --git
a/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Graph.java
b/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Graph.java
index 2408287..2b5eec8 100644
---
a/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Graph.java
+++
b/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Graph.java
@@ -27,6 +27,8 @@ import com.thinkaurelius.titan.core.TitanGraph;
import com.thinkaurelius.titan.core.TitanIndexQuery;
import com.thinkaurelius.titan.core.schema.TitanManagement;
import com.thinkaurelius.titan.core.util.TitanCleanup;
+import org.apache.atlas.ApplicationProperties;
+import org.apache.atlas.AtlasException;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Vertex;
@@ -46,6 +48,7 @@ import org.apache.atlas.repository.graphdb.GremlinVersion;
import org.apache.atlas.repository.graphdb.titan0.query.Titan0GraphQuery;
import org.apache.atlas.repository.graphdb.utils.IteratorToIterableAdapter;
import org.apache.atlas.typesystem.types.IDataType;
+import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -66,6 +69,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_PROPERTY;
+
/**
* Titan 0.5.4 implementation of AtlasGraph.
@@ -74,6 +80,7 @@ public class Titan0Graph implements AtlasGraph<Titan0Vertex,
Titan0Edge> {
private static final Logger LOG =
LoggerFactory.getLogger(Titan0Graph.class);
private final Set<String> multiProperties;
+ private static Configuration APPLICATION_PROPERTIES = null;
public Titan0Graph() {
//determine multi-properties once at startup
@@ -166,7 +173,8 @@ public class Titan0Graph implements
AtlasGraph<Titan0Vertex, Titan0Edge> {
@Override
public AtlasIndexQuery<Titan0Vertex, Titan0Edge> indexQuery(String
fulltextIndex, String graphQuery, int offset) {
- TitanIndexQuery query = getGraph().indexQuery(fulltextIndex,
graphQuery).offset(offset);
+ String prefix = getIndexQueryPrefix();
+ TitanIndexQuery query = getGraph().indexQuery(fulltextIndex,
graphQuery).setElementIdentifier(prefix).offset(offset);
return new Titan0IndexQuery(this, query);
}
@@ -417,4 +425,28 @@ public class Titan0Graph implements
AtlasGraph<Titan0Vertex, Titan0Edge> {
public void addMultiProperties(Set<String> names) {
multiProperties.addAll(names);
}
+
+ public String getIndexQueryPrefix() {
+ String ret;
+
+ initApplicationProperties();
+
+ if (APPLICATION_PROPERTIES == null) {
+ ret = INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
+ } else {
+ ret =
APPLICATION_PROPERTIES.getString(INDEX_SEARCH_VERTEX_PREFIX_PROPERTY,
INDEX_SEARCH_VERTEX_PREFIX_DEFAULT);
+ }
+
+ return ret;
+ }
+
+ private void initApplicationProperties() {
+ if (APPLICATION_PROPERTIES == null) {
+ try {
+ APPLICATION_PROPERTIES = ApplicationProperties.get();
+ } catch (AtlasException ex) {
+ // ignore
+ }
+ }
+ }
}
diff --git
a/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Graph.java
b/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Graph.java
index 622c900..6473d9b 100644
---
a/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Graph.java
+++
b/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Graph.java
@@ -29,6 +29,8 @@ import com.thinkaurelius.titan.core.TitanIndexQuery;
import com.thinkaurelius.titan.core.schema.TitanGraphIndex;
import com.thinkaurelius.titan.core.schema.TitanManagement;
import com.thinkaurelius.titan.core.util.TitanCleanup;
+import org.apache.atlas.ApplicationProperties;
+import org.apache.atlas.AtlasException;
import org.apache.atlas.AtlasErrorCode;
import org.apache.atlas.exception.AtlasBaseException;
import org.apache.atlas.groovy.GroovyExpression;
@@ -43,6 +45,7 @@ import org.apache.atlas.repository.graphdb.GremlinVersion;
import org.apache.atlas.repository.graphdb.titan1.query.Titan1GraphQuery;
import org.apache.atlas.repository.graphdb.utils.IteratorToIterableAdapter;
import org.apache.atlas.typesystem.types.IDataType;
+import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
@@ -68,6 +71,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_PROPERTY;
+
/**
* Titan 1.0.0 implementation of AtlasGraph.
*/
@@ -75,6 +81,8 @@ public class Titan1Graph implements AtlasGraph<Titan1Vertex,
Titan1Edge> {
private final ConvertGremlinValueFunction
GREMLIN_VALUE_CONVERSION_FUNCTION = new ConvertGremlinValueFunction();
+ private static Configuration APPLICATION_PROPERTIES = null;
+
private final class ConvertGremlinValueFunction implements
Function<Object, Object> {
@Override
public Object apply(Object input) {
@@ -199,7 +207,8 @@ public class Titan1Graph implements
AtlasGraph<Titan1Vertex, Titan1Edge> {
@Override
public AtlasIndexQuery<Titan1Vertex, Titan1Edge> indexQuery(String
fulltextIndex, String graphQuery, int offset) {
- TitanIndexQuery query = getGraph().indexQuery(fulltextIndex,
graphQuery).offset(offset);
+ String prefix = getIndexQueryPrefix();
+ TitanIndexQuery query = getGraph().indexQuery(fulltextIndex,
graphQuery).setElementIdentifier(prefix).offset(offset);
return new Titan1IndexQuery(this, query);
}
@@ -427,4 +436,27 @@ public class Titan1Graph implements
AtlasGraph<Titan1Vertex, Titan1Edge> {
multiProperties.addAll(names);
}
+ public String getIndexQueryPrefix() {
+ String ret;
+
+ initApplicationProperties();
+
+ if (APPLICATION_PROPERTIES == null) {
+ ret = INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
+ } else {
+ ret =
APPLICATION_PROPERTIES.getString(INDEX_SEARCH_VERTEX_PREFIX_PROPERTY,
INDEX_SEARCH_VERTEX_PREFIX_DEFAULT);
+ }
+
+ return ret;
+ }
+
+ private void initApplicationProperties() {
+ if (APPLICATION_PROPERTIES == null) {
+ try {
+ APPLICATION_PROPERTIES = ApplicationProperties.get();
+ } catch (AtlasException ex) {
+ // ignore
+ }
+ }
+ }
}
diff --git
a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
index 5de4db5..ea69d95 100644
---
a/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
+++
b/repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java
@@ -51,6 +51,7 @@ import org.apache.atlas.repository.graphdb.AtlasGraph;
import org.apache.atlas.repository.graphdb.AtlasIndexQuery;
import org.apache.atlas.repository.graphdb.AtlasIndexQuery.Result;
import org.apache.atlas.repository.graphdb.AtlasVertex;
+import org.apache.atlas.repository.store.graph.v1.AtlasGraphUtilsV1;
import org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever;
import org.apache.atlas.repository.userprofile.UserProfileService;
import org.apache.atlas.type.AtlasArrayType;
@@ -113,6 +114,7 @@ public class EntityDiscoveryService implements
AtlasDiscoveryService {
private final int maxResultSetSize;
private final int maxTypesLengthInIdxQuery;
private final int maxTagsLengthInIdxQuery;
+ private final String indexSearchPrefix;
private final UserProfileService userProfileService;
@Inject
@@ -129,6 +131,7 @@ public class EntityDiscoveryService implements
AtlasDiscoveryService {
this.maxResultSetSize =
ApplicationProperties.get().getInt(Constants.INDEX_SEARCH_MAX_RESULT_SET_SIZE,
150);
this.maxTypesLengthInIdxQuery =
ApplicationProperties.get().getInt(Constants.INDEX_SEARCH_TYPES_MAX_QUERY_STR_LENGTH,
512);
this.maxTagsLengthInIdxQuery =
ApplicationProperties.get().getInt(Constants.INDEX_SEARCH_TAGS_MAX_QUERY_STR_LENGTH,
512);
+ this.indexSearchPrefix =
AtlasGraphUtilsV1.getIndexSearchPrefix();
this.userProfileService = userProfileService;
}
@@ -660,7 +663,7 @@ public class EntityDiscoveryService implements
AtlasDiscoveryService {
queryText.append(classificationFilter);
}
- return String.format("v.\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, queryText.toString());
+ return String.format(indexSearchPrefix + "\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, queryText.toString());
}
private List<AtlasFullTextResult> getIndexQueryResults(AtlasIndexQuery
query, QueryParams params, boolean excludeDeletedEntities) throws
AtlasBaseException {
@@ -724,7 +727,7 @@ public class EntityDiscoveryService implements
AtlasDiscoveryService {
}
private AtlasIndexQuery toAtlasIndexQuery(String fullTextQuery) {
- String graphQuery = String.format("v.\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, fullTextQuery);
+ String graphQuery = String.format(indexSearchPrefix + "\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, fullTextQuery);
return graph.indexQuery(Constants.FULLTEXT_INDEX, graphQuery);
}
diff --git
a/repository/src/main/java/org/apache/atlas/discovery/FullTextSearchProcessor.java
b/repository/src/main/java/org/apache/atlas/discovery/FullTextSearchProcessor.java
index 5ffd88b..d205f71 100644
---
a/repository/src/main/java/org/apache/atlas/discovery/FullTextSearchProcessor.java
+++
b/repository/src/main/java/org/apache/atlas/discovery/FullTextSearchProcessor.java
@@ -44,7 +44,7 @@ public class FullTextSearchProcessor extends SearchProcessor {
SearchParameters searchParameters = context.getSearchParameters();
StringBuilder queryString = new StringBuilder();
-
queryString.append("v.\"").append(Constants.ENTITY_TEXT_PROPERTY_KEY).append("\":(").append(searchParameters.getQuery());
+ queryString.append(INDEX_SEARCH_PREFIX +
"\"").append(Constants.ENTITY_TEXT_PROPERTY_KEY).append("\":(").append(searchParameters.getQuery());
// if search includes entity-type criteria, adding a filter here can
help avoid unnecessary
// processing (and rejection) by subsequent EntitySearchProcessor
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 fab7074..406d3cd 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
@@ -68,56 +68,57 @@ public abstract class SearchProcessor {
public static final int MAX_RESULT_SIZE =
getApplicationProperty(Constants.INDEX_SEARCH_MAX_RESULT_SET_SIZE, 150);
public static final int MAX_QUERY_STR_LENGTH_TYPES =
getApplicationProperty(Constants.INDEX_SEARCH_TYPES_MAX_QUERY_STR_LENGTH, 512);
public static final int MAX_QUERY_STR_LENGTH_TAGS =
getApplicationProperty(Constants.INDEX_SEARCH_TAGS_MAX_QUERY_STR_LENGTH, 512);
- public static final String AND_STR = " AND ";
- public static final String EMPTY_STRING = "";
- public static final String SPACE_STRING = " ";
- public static final String BRACE_OPEN_STR = "(";
- public static final String BRACE_CLOSE_STR = ")";
+ public static final String INDEX_SEARCH_PREFIX =
AtlasGraphUtilsV1.getIndexSearchPrefix();
+ public static final String AND_STR = " AND ";
+ public static final String EMPTY_STRING = "";
+ public static final String SPACE_STRING = " ";
+ public static final String BRACE_OPEN_STR = "(";
+ public static final String BRACE_CLOSE_STR = ")";
private static final Map<SearchParameters.Operator, String>
OPERATOR_MAP = new HashMap<>();
private static final Map<SearchParameters.Operator,
VertexAttributePredicateGenerator> OPERATOR_PREDICATE_MAP = new HashMap<>();
static
{
- OPERATOR_MAP.put(SearchParameters.Operator.LT,"v.\"%s\": [* TO %s}");
+ OPERATOR_MAP.put(SearchParameters.Operator.LT, INDEX_SEARCH_PREFIX +
"\"%s\": [* TO %s}");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.LT,
getLTPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.GT,"v.\"%s\": {%s TO *]");
+ OPERATOR_MAP.put(SearchParameters.Operator.GT, INDEX_SEARCH_PREFIX +
"\"%s\": {%s TO *]");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.GT,
getGTPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.LTE,"v.\"%s\": [* TO %s]");
+ OPERATOR_MAP.put(SearchParameters.Operator.LTE, INDEX_SEARCH_PREFIX +
"\"%s\": [* TO %s]");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.LTE,
getLTEPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.GTE,"v.\"%s\": [%s TO *]");
+ OPERATOR_MAP.put(SearchParameters.Operator.GTE, INDEX_SEARCH_PREFIX +
"\"%s\": [%s TO *]");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.GTE,
getGTEPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.EQ,"v.\"%s\": %s");
+ OPERATOR_MAP.put(SearchParameters.Operator.EQ, INDEX_SEARCH_PREFIX +
"\"%s\": %s");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.EQ,
getEQPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.NEQ,"(*:* -" + "v.\"%s\":
%s)");
+ OPERATOR_MAP.put(SearchParameters.Operator.NEQ, "(*:* -" +
INDEX_SEARCH_PREFIX + "\"%s\": %s)");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.NEQ,
getNEQPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.IN, "v.\"%s\": (%s)"); //
this should be a list of quoted strings
+ OPERATOR_MAP.put(SearchParameters.Operator.IN, INDEX_SEARCH_PREFIX +
"\"%s\": (%s)"); // this should be a list of quoted strings
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.IN,
getINPredicateGenerator()); // this should be a list of quoted strings
- OPERATOR_MAP.put(SearchParameters.Operator.LIKE, "v.\"%s\": (%s)"); //
this should be regex pattern
+ OPERATOR_MAP.put(SearchParameters.Operator.LIKE, INDEX_SEARCH_PREFIX +
"\"%s\": (%s)"); // this should be regex pattern
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.LIKE,
getLIKEPredicateGenerator()); // this should be regex pattern
- OPERATOR_MAP.put(SearchParameters.Operator.STARTS_WITH, "v.\"%s\":
(%s*)");
+ OPERATOR_MAP.put(SearchParameters.Operator.STARTS_WITH,
INDEX_SEARCH_PREFIX + "\"%s\": (%s*)");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.STARTS_WITH,
getStartsWithPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.ENDS_WITH, "v.\"%s\":
(*%s)");
+ OPERATOR_MAP.put(SearchParameters.Operator.ENDS_WITH,
INDEX_SEARCH_PREFIX + "\"%s\": (*%s)");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.ENDS_WITH,
getEndsWithPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.CONTAINS, "v.\"%s\":
(*%s*)");
+ OPERATOR_MAP.put(SearchParameters.Operator.CONTAINS,
INDEX_SEARCH_PREFIX + "\"%s\": (*%s*)");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.CONTAINS,
getContainsPredicateGenerator());
// TODO: Add contains any, contains all mappings here
- OPERATOR_MAP.put(SearchParameters.Operator.IS_NULL, "(*:* NOT
v.\"%s\":[* TO *])");
+ OPERATOR_MAP.put(SearchParameters.Operator.IS_NULL, "(*:* NOT " +
INDEX_SEARCH_PREFIX + "\"%s\":[* TO *])");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.IS_NULL,
getIsNullPredicateGenerator());
- OPERATOR_MAP.put(SearchParameters.Operator.NOT_NULL, "v.\"%s\":[* TO
*]");
+ OPERATOR_MAP.put(SearchParameters.Operator.NOT_NULL,
INDEX_SEARCH_PREFIX + "\"%s\":[* TO *]");
OPERATOR_PREDICATE_MAP.put(SearchParameters.Operator.NOT_NULL,
getNotNullPredicateGenerator());
}
@@ -255,7 +256,7 @@ public abstract class SearchProcessor {
indexQuery.append(AND_STR);
}
-
indexQuery.append("v.\"").append(Constants.TYPE_NAME_PROPERTY_KEY).append("\":").append(typeAndAllSubTypesQryStr);
+ indexQuery.append(INDEX_SEARCH_PREFIX +
"\"").append(Constants.TYPE_NAME_PROPERTY_KEY).append("\":").append(typeAndAllSubTypesQryStr);
}
}
@@ -337,7 +338,7 @@ public abstract class SearchProcessor {
indexQuery.append(AND_STR);
}
-
indexQuery.append("v.\"").append(Constants.STATE_PROPERTY_KEY).append("\":ACTIVE");
+ indexQuery.append(INDEX_SEARCH_PREFIX +
"\"").append(Constants.STATE_PROPERTY_KEY).append("\":ACTIVE");
}
private boolean isIndexSearchable(FilterCriteria filterCriteria,
AtlasStructType structType) throws AtlasBaseException {
diff --git
a/repository/src/main/java/org/apache/atlas/discovery/graph/GraphBackedDiscoveryService.java
b/repository/src/main/java/org/apache/atlas/discovery/graph/GraphBackedDiscoveryService.java
index e5e527f..340351e 100755
---
a/repository/src/main/java/org/apache/atlas/discovery/graph/GraphBackedDiscoveryService.java
+++
b/repository/src/main/java/org/apache/atlas/discovery/graph/GraphBackedDiscoveryService.java
@@ -69,6 +69,7 @@ public class GraphBackedDiscoveryService implements
DiscoveryService {
private static final Logger LOG =
LoggerFactory.getLogger(GraphBackedDiscoveryService.class);
private final AtlasGraph graph;
+ private final String indexSearchPrefix;
private final DefaultGraphPersistenceStrategy graphPersistenceStrategy;
public final static String SCORE = "score";
@@ -93,6 +94,7 @@ public class GraphBackedDiscoveryService implements
DiscoveryService {
GraphBackedDiscoveryService(MetadataRepository metadataRepository,
AtlasGraph atlasGraph)
throws DiscoveryException {
this.graph = atlasGraph;
+ this.indexSearchPrefix = AtlasGraphUtilsV1.getIndexSearchPrefix();
this.graphPersistenceStrategy = new
DefaultGraphPersistenceStrategy(metadataRepository);
}
@@ -102,7 +104,7 @@ public class GraphBackedDiscoveryService implements
DiscoveryService {
@Override
@GraphTransaction
public String searchByFullText(String query, QueryParams queryParams)
throws DiscoveryException {
- String graphQuery = String.format("v.\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, query);
+ String graphQuery = String.format(indexSearchPrefix + "\"%s\":(%s)",
Constants.ENTITY_TEXT_PROPERTY_KEY, query);
LOG.debug("Full text query: {}", graphQuery);
Iterator<AtlasIndexQuery.Result<?, ?>> results
=graph.indexQuery(Constants.FULLTEXT_INDEX, graphQuery).vertices();
JSONArray response = new JSONArray();
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
index bf46c47..b9488ee 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasGraphUtilsV1.java
@@ -51,23 +51,28 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
+import static
org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_PROPERTY;
+
/**
* Utility methods for Graph.
*/
public class AtlasGraphUtilsV1 {
private static final Logger LOG =
LoggerFactory.getLogger(AtlasGraphUtilsV1.class);
- public static final String PROPERTY_PREFIX =
Constants.INTERNAL_PROPERTY_KEY_PREFIX + "type.";
- public static final String SUPERTYPE_EDGE_LABEL = PROPERTY_PREFIX +
".supertype";
- public static final String VERTEX_TYPE = "typeSystem";
+ public static final String PROPERTY_PREFIX =
Constants.INTERNAL_PROPERTY_KEY_PREFIX + "type.";
+ public static final String SUPERTYPE_EDGE_LABEL = PROPERTY_PREFIX +
".supertype";
+ public static final String VERTEX_TYPE = "typeSystem";
private static boolean USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES
= false;
+ private static String INDEX_SEARCH_PREFIX =
INDEX_SEARCH_VERTEX_PREFIX_DEFAULT;
static {
try {
Configuration conf = ApplicationProperties.get();
USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES =
conf.getBoolean("atlas.use.index.query.to.find.entity.by.unique.attributes",
USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES);
+ INDEX_SEARCH_PREFIX =
conf.getString(INDEX_SEARCH_VERTEX_PREFIX_PROPERTY,
INDEX_SEARCH_VERTEX_PREFIX_DEFAULT);
} catch (Exception excp) {
LOG.error("Error reading configuration", excp);
} finally {
@@ -466,12 +471,16 @@ public class AtlasGraphUtilsV1 {
private static AtlasIndexQuery getIndexQuery(AtlasEntityType entityType,
String propertyName, String value) {
StringBuilder sb = new StringBuilder();
-
sb.append("v.\"").append(Constants.TYPE_NAME_PROPERTY_KEY).append("\":").append(entityType.getTypeAndAllSubTypesQryStr())
+ sb.append(INDEX_SEARCH_PREFIX +
"\"").append(Constants.TYPE_NAME_PROPERTY_KEY).append("\":").append(entityType.getTypeAndAllSubTypesQryStr())
.append(" AND ")
-
.append("v.\"").append(propertyName).append("\":").append(AtlasAttribute.escapeIndexQueryValue(value))
+ .append(INDEX_SEARCH_PREFIX +
"\"").append(propertyName).append("\":").append(AtlasAttribute.escapeIndexQueryValue(value))
.append(" AND ")
-
.append("v.\"").append(Constants.STATE_PROPERTY_KEY).append("\":ACTIVE");
+ .append(INDEX_SEARCH_PREFIX +
"\"").append(Constants.STATE_PROPERTY_KEY).append("\":ACTIVE");
return
AtlasGraphProvider.getGraphInstance().indexQuery(Constants.VERTEX_INDEX,
sb.toString());
}
+
+ public static String getIndexSearchPrefix() {
+ return INDEX_SEARCH_PREFIX;
+ }
}
diff --git
a/repository/src/test/java/org/apache/atlas/repository/graph/GraphRepoMapperScaleTest.java
b/repository/src/test/java/org/apache/atlas/repository/graph/GraphRepoMapperScaleTest.java
index 1f077ba..522c368 100755
---
a/repository/src/test/java/org/apache/atlas/repository/graph/GraphRepoMapperScaleTest.java
+++
b/repository/src/test/java/org/apache/atlas/repository/graph/GraphRepoMapperScaleTest.java
@@ -30,6 +30,7 @@ import org.apache.atlas.repository.graphdb.AtlasGraphQuery;
import org.apache.atlas.repository.graphdb.AtlasGraphQuery.ComparisionOperator;
import org.apache.atlas.repository.graphdb.AtlasIndexQuery;
import org.apache.atlas.repository.graphdb.AtlasVertex;
+import org.apache.atlas.repository.store.graph.v1.AtlasGraphUtilsV1;
import org.apache.atlas.type.AtlasTypeRegistry;
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
import org.apache.atlas.typesystem.Referenceable;
@@ -59,6 +60,7 @@ public class GraphRepoMapperScaleTest {
private static final String DATABASE_NAME = "foo";
private static final String TABLE_NAME = "bar";
+ private String indexSearchPrefix;
@Inject
private GraphBackedMetadataRepository repositoryService;
@@ -79,6 +81,7 @@ public class GraphRepoMapperScaleTest {
//Make sure we can cleanup the index directory
Collection<IDataType> typesAdded =
TestUtils.createHiveTypes(typeSystem);
searchIndexer.onAdd(typesAdded);
+ this.indexSearchPrefix = AtlasGraphUtilsV1.getIndexSearchPrefix();
}
@BeforeMethod
@@ -159,7 +162,7 @@ public class GraphRepoMapperScaleTest {
long start = System.currentTimeMillis();
int count = 0;
try {
- String queryString = "v.\"" + key + "\":(" + value + ")";
+ String queryString = indexSearchPrefix + "\"" + key + "\":(" +
value + ")";
AtlasIndexQuery query = graph.indexQuery(Constants.VERTEX_INDEX,
queryString);
Iterator<AtlasIndexQuery.Result> result = query.vertices();
while(result.hasNext()) {