Skip to content
This repository was archived by the owner on Aug 20, 2025. It is now read-only.

Commit 6aafd1f

Browse files
committed
add ability for sysadmin to return ES query instead of results
1 parent d66a525 commit 6aafd1f

File tree

18 files changed

+216
-35
lines changed

18 files changed

+216
-35
lines changed

stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,7 @@ public Results searchCollection( String collectionName, Query query ) throws Exc
634634
final Optional<String> queryString = query.isGraphSearch()? Optional.<String>absent(): query.getQl();
635635
final Id ownerId = headEntity.asId();
636636
final boolean analyzeOnly = query.getAnalyzeOnly();
637+
final boolean returnQuery = query.getReturnQuery();
637638

638639

639640
if(query.getLevel() == Level.IDS ){
@@ -648,6 +649,7 @@ protected Observable<ResultsPage<Id>> buildNewResultsPage(
648649
queryString, cursor );
649650

650651
search.setAnalyzeOnly(analyzeOnly);
652+
search.setReturnQuery(returnQuery);
651653

652654
return collectionService.searchCollectionIds( search );
653655
}
@@ -666,6 +668,7 @@ protected Observable<ResultsPage<org.apache.usergrid.persistence.model.entity.En
666668
queryString, cursor );
667669

668670
search.setAnalyzeOnly(analyzeOnly);
671+
search.setReturnQuery(returnQuery);
669672
IndexConsistency indexConsistency = getIndexConsistencyForType(collectionName);
670673
search.setKeepStaleEntries(indexConsistency == IndexConsistency.LATEST);
671674

@@ -931,6 +934,7 @@ public Results searchTargetEntities( Query query ) throws Exception {
931934
headEntity = em.validate( headEntity );
932935

933936
final boolean analyzeOnly = query.getAnalyzeOnly();
937+
final boolean returnQuery = query.getReturnQuery();
934938

935939

936940
final Query toExecute = adjustQuery( query );
@@ -965,6 +969,7 @@ protected Observable<ResultsPage<ConnectionRef>> buildNewResultsPage( final Opti
965969
new ConnectionSearch( applicationScope, sourceId, entityType, connection, toExecute.getLimit(),
966970
queryString, cursor, isConnecting );
967971
search.setAnalyzeOnly(analyzeOnly);
972+
search.setReturnQuery(returnQuery);
968973
return connectionService.searchConnectionAsRefs( search );
969974
}
970975
}.next();
@@ -981,6 +986,7 @@ protected Observable<ResultsPage<org.apache.usergrid.persistence.model.entity.En
981986
new ConnectionSearch( applicationScope, sourceId, entityType, connection, toExecute.getLimit(),
982987
queryString, cursor, isConnecting );
983988
search.setAnalyzeOnly(analyzeOnly);
989+
search.setReturnQuery(returnQuery);
984990
return connectionService.searchConnection( search );
985991
}
986992
}.next();

stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/builder/IdBuilder.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,21 +118,23 @@ public IdBuilder traverseConnection( final String connectionName, final Optional
118118
* @param collectionName The name of the collection
119119
* @param ql The user's query to execute
120120
* @param entityType The type of the entity
121-
* @param analyzeOnly
121+
* @param analyzeOnly Whether only query analysis should be performed
122+
* @param returnQuery Whether query should be returned instead of results
122123
* @return Candidate results
123124
*/
124-
public CandidateBuilder searchCollection(final String collectionName, final String ql, final String entityType, boolean analyzeOnly) {
125+
public CandidateBuilder searchCollection(final String collectionName, final String ql, final String entityType,
126+
final boolean analyzeOnly, final boolean returnQuery) {
125127

126128
final Pipeline<FilterResult<Candidate>> newFilter = pipeline.withFilter( filterFactory.searchCollectionFilter(
127-
ql, collectionName, entityType, analyzeOnly ) );
129+
ql, collectionName, entityType, analyzeOnly, returnQuery ) );
128130

129131
return new CandidateBuilder( newFilter, filterFactory , null);
130132
}
131133

132134
public CandidateBuilder searchCollection(final String collectionName, final String ql, final CollectionSearch search ) {
133135

134136
final Pipeline<FilterResult<Candidate>> newFilter = pipeline.withFilter( filterFactory.searchCollectionFilter(
135-
ql, collectionName, search.getEntityType(), search.getAnalyzeOnly() ) );
137+
ql, collectionName, search.getEntityType(), search.getAnalyzeOnly(), search.getReturnQuery() ) );
136138

137139
return new CandidateBuilder( newFilter, filterFactory, search );
138140
}
@@ -142,14 +144,16 @@ public CandidateBuilder searchCollection(final String collectionName, final Stri
142144
* @param connectionName The connection name to search
143145
* @param ql The query to execute
144146
* @param entityType The optional type of entity. If this is absent, all entity types in the connection will be searched
145-
* @param analyzeOnly
147+
* @param analyzeOnly Whether only query analysis should be performed
148+
* @param returnQuery Whether index query should be returned instead of results
146149
* @return Candidate results
147150
*/
148-
public CandidateBuilder searchConnection(final String connectionName, final String ql, final Optional<String> entityType, boolean analyzeOnly) {
151+
public CandidateBuilder searchConnection(final String connectionName, final String ql, final Optional<String> entityType,
152+
final boolean analyzeOnly, final boolean returnQuery) {
149153

150154

151155
final Pipeline<FilterResult<Candidate>> newFilter = pipeline.withFilter( filterFactory.searchConnectionFilter(
152-
ql, connectionName, entityType,analyzeOnly ) );
156+
ql, connectionName, entityType, analyzeOnly, returnQuery ) );
153157

154158
return new CandidateBuilder( newFilter, filterFactory );
155159
}

stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ ReadGraphConnectionByTypeFilter readGraphConnectionByTypeFilter(
9797
SearchCollectionFilter searchCollectionFilter( @Assisted( "query" ) final String query,
9898
@Assisted( "collectionName" ) final String collectionName,
9999
@Assisted( "entityType" ) final String entityType,
100-
@Assisted( "analyzeOnly") final boolean analyzeOnly);
100+
@Assisted( "analyzeOnly") final boolean analyzeOnly,
101+
@Assisted( "returnQuery" ) final boolean returnQuery);
101102

102103

103104
/**
@@ -110,7 +111,8 @@ SearchCollectionFilter searchCollectionFilter( @Assisted( "query" ) final String
110111
SearchConnectionFilter searchConnectionFilter( @Assisted( "query" ) final String query,
111112
@Assisted( "connectionName" ) final String connectionName,
112113
@Assisted( "connectedEntityType" ) final Optional<String> connectedEntityType,
113-
@Assisted( "analyzeOnly") final boolean analyzeOnly);
114+
@Assisted( "analyzeOnly") final boolean analyzeOnly,
115+
@Assisted( "returnQuery") final boolean returnQuery);
114116

115117

116118
/**

stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public abstract class AbstractElasticSearchFilter extends AbstractPathFilter<Id,
5757
private final String query;
5858
private final Timer searchTimer;
5959
private final boolean analyzeOnly;
60+
private final boolean returnQuery;
6061

6162

6263
/**
@@ -65,12 +66,13 @@ public abstract class AbstractElasticSearchFilter extends AbstractPathFilter<Id,
6566
public AbstractElasticSearchFilter(final EntityIndexFactory entityIndexFactory,
6667
final MetricsFactory metricsFactory,
6768
final IndexLocationStrategyFactory indexLocationStrategyFactory,
68-
final String query, boolean analyzeOnly) {
69+
final String query, boolean analyzeOnly, boolean returnQuery) {
6970
this.entityIndexFactory = entityIndexFactory;
7071
this.indexLocationStrategyFactory = indexLocationStrategyFactory;
7172
this.query = query;
7273
this.searchTimer = metricsFactory.getTimer( AbstractElasticSearchFilter.class, "query.search" );
7374
this.analyzeOnly = analyzeOnly;
75+
this.returnQuery = returnQuery;
7476
}
7577

7678

@@ -127,7 +129,8 @@ public Observable<FilterResult<Candidate>> call( final Observable<FilterResult<I
127129

128130
try {
129131
final CandidateResults candidateResults =
130-
applicationEntityIndex.search( searchEdge, searchTypes, query, limit, currentOffSet, propertiesWithType, analyzeOnly );
132+
applicationEntityIndex.search( searchEdge, searchTypes, query, limit, currentOffSet,
133+
propertiesWithType, analyzeOnly, returnQuery);
131134

132135

133136
Collection<SelectFieldMapping> fieldMappingCollection = candidateResults.getGetFieldMappings();

stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ public SearchCollectionFilter( final EntityIndexFactory entityIndexFactory,
5353
@Assisted( "query" ) final String query,
5454
@Assisted( "collectionName" ) final String collectionName,
5555
@Assisted( "entityType" ) final String entityType,
56-
@Assisted( "analyzeOnly") final boolean analyzeOnly) {
57-
super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query, analyzeOnly );
56+
@Assisted( "analyzeOnly") final boolean analyzeOnly,
57+
@Assisted( "returnQuery" ) final boolean returnQuery) {
58+
super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query, analyzeOnly, returnQuery);
5859
this.collectionName = collectionName;
5960
this.entityType = entityType;
6061
}

stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ public SearchConnectionFilter( final EntityIndexFactory entityIndexFactory,
5151
@Assisted( "query" ) final String query,
5252
@Assisted( "connectionName" ) final String connectionName,
5353
@Assisted( "connectedEntityType" ) final Optional<String> connectedEntityType,
54-
@Assisted( "analyzeOnly") final boolean analyzeOnly) {
55-
super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query, analyzeOnly);
54+
@Assisted( "analyzeOnly") final boolean analyzeOnly,
55+
@Assisted( "returnQuery" ) final boolean returnQuery) {
56+
super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query, analyzeOnly, returnQuery);
5657

5758
this.connectionName = connectionName;
5859
this.connectedEntityType = connectedEntityType;

stack/core/src/main/java/org/apache/usergrid/corepersistence/service/CollectionSearch.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public enum Level {
4242
private final Optional<String> cursor;
4343
private Level level = Level.ALL;
4444
private boolean analyzeOnly;
45+
private boolean returnQuery;
4546
private boolean keepStaleEntries;
4647

4748

@@ -56,6 +57,7 @@ public CollectionSearch( final ApplicationScope applicationScope, final Id colle
5657
this.query = query;
5758
this.cursor = cursor;
5859
this.analyzeOnly = false;
60+
this.returnQuery = false;
5961
}
6062

6163

@@ -105,6 +107,14 @@ public void setAnalyzeOnly(final boolean analyzeOnly){
105107
this.analyzeOnly = analyzeOnly;
106108
}
107109

110+
public boolean getReturnQuery() {
111+
return returnQuery;
112+
}
113+
114+
public void setReturnQuery(final boolean returnQuery) {
115+
this.returnQuery = returnQuery;
116+
}
117+
108118
public boolean getKeepStaleEntries() {
109119
return keepStaleEntries;
110120
}

stack/core/src/main/java/org/apache/usergrid/corepersistence/service/ConnectionSearch.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class ConnectionSearch {
3838
private final Optional<String> cursor;
3939
private final boolean isConnecting;
4040
private boolean analyzeOnly;
41+
private boolean returnQuery;
4142

4243

4344

@@ -53,6 +54,7 @@ public ConnectionSearch( final ApplicationScope applicationScope, final Id sourc
5354
this.cursor = cursor;
5455
this.isConnecting = isConnecting;
5556
this.analyzeOnly = false;
57+
this.returnQuery = false;
5658

5759
}
5860

@@ -102,4 +104,12 @@ public boolean getAnalyzeOnly() {
102104
public void setAnalyzeOnly(final boolean analyzeOnly){
103105
this.analyzeOnly = analyzeOnly;
104106
}
107+
108+
public boolean getReturnQuery() {
109+
return returnQuery;
110+
}
111+
112+
public void setReturnQuery(final boolean returnQuery) {
113+
this.returnQuery = returnQuery;
114+
}
105115
}

stack/core/src/main/java/org/apache/usergrid/corepersistence/service/ConnectionServiceImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ public Observable<ResultsPage<Entity>> searchConnection( final ConnectionSearch
106106
else {
107107

108108
results =
109-
pipelineBuilder.searchConnection( search.getConnectionName(), query.get(), search.getEntityType(), search.getAnalyzeOnly() )
109+
pipelineBuilder.searchConnection( search.getConnectionName(), query.get(), search.getEntityType(),
110+
search.getAnalyzeOnly(), search.getReturnQuery() )
110111
.loadEntities();
111112
}
112113

@@ -135,7 +136,8 @@ public Observable<ResultsPage<ConnectionRef>> searchConnectionAsRefs( final Conn
135136
}
136137
else {
137138
traversedIds =
138-
pipelineBuilder.searchConnection( connectionName, query.get(), search.getEntityType(), search.getAnalyzeOnly() ).loadIds();
139+
pipelineBuilder.searchConnection( connectionName, query.get(), search.getEntityType(),
140+
search.getAnalyzeOnly(), search.getReturnQuery() ).loadIds();
139141
}
140142

141143
//create connection refs

stack/core/src/main/java/org/apache/usergrid/persistence/Query.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public enum Level {
8282
private String ql;
8383
private Collection<SelectFieldMapping> selectFields;
8484
private boolean analyzeOnly = false;
85+
private boolean returnQuery = false;
8586

8687

8788
private static ObjectMapper mapper = new ObjectMapper();
@@ -125,7 +126,7 @@ public Query( Query q ) {
125126
collection = q.collection;
126127
level = q.level;
127128
analyzeOnly = q.analyzeOnly;
128-
129+
returnQuery = q.returnQuery;
129130
}
130131

131132

@@ -506,6 +507,14 @@ public boolean getAnalyzeOnly(){
506507
return analyzeOnly;
507508
}
508509

510+
public void setReturnQuery(final boolean returnQuery) {
511+
this.returnQuery = returnQuery;
512+
}
513+
514+
public boolean getReturnQuery() {
515+
return returnQuery;
516+
}
517+
509518
public boolean isMergeSelectResults() {
510519
return mergeSelectResults;
511520
}

0 commit comments

Comments
 (0)