ATLAS-4109: Advanced Search: Glossary: More Efficient Structure
diff --git a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
index b7e5330..7014b4a 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
@@ -69,7 +69,8 @@
     // idx of the tuple field to be sorted on
     INLINE_TUPLE_SORT_ASC(".sort{a,b -> a[%s] <=> b[%s]}"),
     INLINE_TUPLE_SORT_DESC(".sort{a,b -> b[%s] <=> a[%s]}"),
-    TERM("and(__.in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.%s', eq('%s')).dedup())"),
+    TERM("where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.%s', '%s'))"),
+
     V("V()"),
     VALUE_MAP("valueMap(%s)");
 
diff --git a/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java b/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
index 156a65c..26942c7 100644
--- a/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
+++ b/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
@@ -248,12 +248,10 @@
 
                 case TERM:
                     String term = String.format("AtlasGlossaryTerm.%s", values[0]);
-
-                    traversal.and(
-                            traversal.startAnonymousTraversal()
-                                     .in(org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL)
-                                     .has(term, P.eq(values[1]))
-                                     .dedup()
+                    traversal.where(
+                             traversal.startAnonymousTraversal()
+                            .in(org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL)
+                            .has(term, P.eq(values[1]))
                             );
                     break;
 
diff --git a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
index 3594e2f..3a2d66d 100644
--- a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
@@ -334,21 +334,17 @@
 
     @Test
     public void glossaryTermQueries() {
-        verify("Table hasTerm sales", "g.V().has('__typeName', 'Table')." +
-                "and(__.in('r:AtlasGlossarySemanticAssignment')." +
-                "has('AtlasGlossaryTerm.name', eq('sales')).dedup())." +
-                "dedup().limit(25).toList()");
+        verify("Table hasTerm sales", "g.V().has('__typeName', 'Table')" +
+                ".where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.name', 'sales'))" +
+                ".dedup().limit(25).toList()");
         verify("Table hasTerm \"sales@glossary\"", "g.V().has('__typeName', 'Table')." +
-                "and(__.in('r:AtlasGlossarySemanticAssignment')." +
-                "has('AtlasGlossaryTerm.qualifiedName', eq('sales@glossary')).dedup())." +
-                "dedup().limit(25).toList()");
+                "where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', 'sales@glossary'))" +
+                ".dedup().limit(25).toList()");
         verify("Table hasTerm \"sales@glossary\" and owner = \"fetl\"",
                 "g.V().has('__typeName', 'Table')" +
                         ".and(" +
-                            "__.and(" +
-                                "__.in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', eq('sales@glossary'))" +
-                                ".dedup())," +
-                                "__.has('Table.owner', eq(\"fetl\"))" +
+                            "__.where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', 'sales@glossary'))" +
+                            ",__.has('Table.owner', eq(\"fetl\"))" +
                         ").dedup().limit(25).toList()");
     }