Lin Han created ATLAS-3021:
------------------------------
Summary: A question of the index key of eneity's attribute
Key: ATLAS-3021
URL: https://issues.apache.org/jira/browse/ATLAS-3021
Project: Atlas
Issue Type: Improvement
Components: atlas-core, atlas-intg
Affects Versions: 1.1.0
Environment: centos
Reporter: Lin Han
hi, guys
At these days, When i want to improve the efficiency of atlas create new entity
by use the function "createOrUpdate" of AtlasEntityStoreV2, so i find the way
to use the index.
1.add the config
"atlas.use.index.query.to.find.entity.by.unique.attributes=true" to my
atlas-application.properties,
2.add the config "<isIndexable>true</isIndexable>" to the attribute of my
ClassType define xml, like this :
{code:java}
//代码占位符
<ClassType>
<name>HDFSDir</name>
<desc>HDFS directory</desc>
<attrs>
<attr>
<name>contextPath</name>
<desc>HDFS directory contextPath</desc>
<isOptional>false</isOptional>
<isIndexable>true</isIndexable>
<typeName>string</typeName>
<isUnique>true</isUnique>
<cardinality>single</cardinality>
<extInfo>
<item key="canconfig" value="false"/>
</extInfo>
</attr>
...
{code}
The question is that i find the "canUseIndexQuery" function code of
AtlasGraphUtilsV2.java always return false
{code:java}
//代码占位符
private static boolean canUseIndexQuery(AtlasEntityType entityType, String
attributeName) {
boolean ret = false;
if (USE_INDEX_QUERY_TO_FIND_ENTITY_BY_UNIQUE_ATTRIBUTES) {
final String typeAndSubTypesQryStr =
entityType.getTypeAndAllSubTypesQryStr();
ret = typeAndSubTypesQryStr.length() <=
SearchProcessor.MAX_QUERY_STR_LENGTH_TYPES;
if (ret) {
Set<String> indexSet =
AtlasGraphProvider.getGraphInstance().getVertexIndexKeys();
try {
ret =
indexSet.contains(entityType.getQualifiedAttributeName(attributeName));
}
catch (AtlasBaseException ex) {
ret = false;
}
}
}
return ret;
}{code}
The indexSet contains the "HDFSDir.contextPath__superTypeNames" and
"HDFSDir.contextPath__typeName"(this is the index Generate by atlas due to the
isIndexable config),but the code
"entityType.getQualifiedAttributeName(attributeName)" return is
"HDFSDir.contextPath", so it's obvious that indexSet is not contains the
"HDFSDir.contextPath".
And I also find that the function "createIndexForAttribute" of
GraphBackedSearchIndexer.java, the config "isIndexable=true" is to create the
CompositeIndexWithTypeAndSuperTypes, and it will not create the CompositeIndex
because the parameter createCompositeIndex is false, hard-coded.
So how to really use the index when create entity or I used it in a wrong way?
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)