Commit 64c9bde6 by Madhan Neethiraj

ATLAS-2082: basic-search fails when in-memory filters all results from index-query

parent bb189766
......@@ -236,6 +236,10 @@ public class ClassificationSearchProcessor extends SearchProcessor {
// Now filter on the tag attributes
Set<String> guids = getGuids(entityVertices);
// Clear prior results
entityVertices.clear();
if (CollectionUtils.isNotEmpty(guids)) {
gremlinQueryBindings.put("guids", guids);
try {
......@@ -243,17 +247,14 @@ public class ClassificationSearchProcessor extends SearchProcessor {
ScriptEngine gremlinScriptEngine = graph.getGremlinScriptEngine();
List<AtlasVertex> atlasVertices = (List<AtlasVertex>) graph.executeGremlinScript(gremlinScriptEngine, gremlinQueryBindings, gremlinTagFilterQuery, false);
// Clear prior results
entityVertices.clear();
if (CollectionUtils.isNotEmpty(atlasVertices)) {
entityVertices.addAll(atlasVertices);
}
} catch (AtlasBaseException | ScriptException e) {
LOG.warn(e.getMessage(), e);
}
}
}
super.filter(entityVertices);
......
......@@ -173,13 +173,18 @@ public class EntitySearchProcessor extends SearchProcessor {
CollectionUtils.filter(entityVertices, inMemoryPredicate);
if (graphQuery != null) {
AtlasGraphQuery guidQuery = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, getGuids(entityVertices));
Set<String> guids = getGuids(entityVertices);
entityVertices.clear();
if (CollectionUtils.isNotEmpty(guids)) {
AtlasGraphQuery guidQuery = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, guids);
guidQuery.addConditionsFrom(graphQuery);
entityVertices.clear();
getVertices(guidQuery.vertices().iterator(), entityVertices);
}
}
} else {
Iterator<AtlasVertex> queryResult = graphQuery.vertices(qryOffset, limit).iterator();
......@@ -211,12 +216,17 @@ public class EntitySearchProcessor extends SearchProcessor {
LOG.debug("==> EntitySearchProcessor.filter({})", entityVertices.size());
}
AtlasGraphQuery query = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, getGuids(entityVertices));
Set<String> guids = getGuids(entityVertices);
entityVertices.clear();
if (CollectionUtils.isNotEmpty(guids)) {
AtlasGraphQuery query = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, guids);
query.addConditionsFrom(filterGraphQuery);
entityVertices.clear();
getVertices(query.vertices().iterator(), entityVertices);
}
super.filter(entityVertices);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment