Skip to content

Commit 1d09367

Browse files
gurkankaymakjimczi
authored andcommitted
Fixed ignoring name parameter for percolator queries (#42598)
Closes #40405
1 parent c079fb6 commit 1d09367

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java

+17-4
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public PercolateQueryBuilder(String field, String documentType, List<BytesRefere
181181
this.documentSupplier = null;
182182
}
183183

184-
private PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
184+
protected PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
185185
if (field == null) {
186186
throw new IllegalArgumentException("[field] is a required argument");
187187
}
@@ -519,8 +519,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
519519
if (source == null) {
520520
return this; // not executed yet
521521
} else {
522-
return new PercolateQueryBuilder(field, documentType, Collections.singletonList(source),
523-
XContentHelper.xContentType(source));
522+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType,
523+
Collections.singletonList(source), XContentHelper.xContentType(source));
524+
if (name != null) {
525+
rewritten.setName(name);
526+
}
527+
return rewritten;
524528
}
525529
}
526530
GetRequest getRequest;
@@ -555,7 +559,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
555559
listener.onResponse(null);
556560
}, listener::onFailure));
557561
});
558-
return new PercolateQueryBuilder(field, documentType, documentSupplier::get);
562+
563+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType, documentSupplier::get);
564+
if (name != null) {
565+
rewritten.setName(name);
566+
}
567+
return rewritten;
559568
}
560569

561570
@Override
@@ -654,6 +663,10 @@ XContentType getXContentType() {
654663
return documentXContentType;
655664
}
656665

666+
public String getQueryName() {
667+
return name;
668+
}
669+
657670
static IndexSearcher createMultiDocumentSearcher(Analyzer analyzer, Collection<ParsedDocument> docs) {
658671
RAMDirectory ramDirectory = new RAMDirectory();
659672
try (IndexWriter indexWriter = new IndexWriter(ramDirectory, new IndexWriterConfig(analyzer))) {

modules/percolator/src/test/java/org/elasticsearch/percolator/PercolateQueryBuilderTests.java

+26
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.List;
5555
import java.util.Map;
5656
import java.util.Set;
57+
import java.util.function.Supplier;
5758

5859
import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO;
5960
import static org.hamcrest.Matchers.equalTo;
@@ -331,4 +332,29 @@ public void testFieldAlias() throws IOException {
331332
assertEquals(query.getVerifiedMatchesQuery(), aliasQuery.getVerifiedMatchesQuery());
332333
}
333334

335+
public void testSettingNameWhileRewriting() {
336+
String testName = "name1";
337+
QueryShardContext shardContext = createShardContext();
338+
PercolateQueryBuilder percolateQueryBuilder = doCreateTestQueryBuilder(true);
339+
percolateQueryBuilder.setName(testName);
340+
341+
QueryBuilder rewrittenQueryBuilder = percolateQueryBuilder.doRewrite(shardContext);
342+
343+
assertEquals(testName, ((PercolateQueryBuilder) rewrittenQueryBuilder).getQueryName());
344+
assertNotEquals(rewrittenQueryBuilder, percolateQueryBuilder);
345+
}
346+
347+
public void testSettingNameWhileRewritingWhenDocumentSupplierAndSourceNotNull() {
348+
Supplier<BytesReference> supplier = () -> new BytesArray("{\"test\": \"test\"}");
349+
String testName = "name1";
350+
QueryShardContext shardContext = createShardContext();
351+
PercolateQueryBuilder percolateQueryBuilder = new PercolateQueryBuilder(queryField, null, supplier);
352+
percolateQueryBuilder.setName(testName);
353+
354+
QueryBuilder rewrittenQueryBuilder = percolateQueryBuilder.doRewrite(shardContext);
355+
356+
assertEquals(testName, ((PercolateQueryBuilder) rewrittenQueryBuilder).getQueryName());
357+
assertNotEquals(rewrittenQueryBuilder, percolateQueryBuilder);
358+
}
359+
334360
}

0 commit comments

Comments
 (0)