Skip to content

Commit a3fdf96

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

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public PercolateQueryBuilder(String field, String documentType, List<BytesRefere
179179
this.documentSupplier = null;
180180
}
181181

182-
private PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
182+
protected PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
183183
if (field == null) {
184184
throw new IllegalArgumentException("[field] is a required argument");
185185
}
@@ -524,8 +524,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
524524
if (source == null) {
525525
return this; // not executed yet
526526
} else {
527-
return new PercolateQueryBuilder(field, documentType, Collections.singletonList(source),
528-
XContentHelper.xContentType(source));
527+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType,
528+
Collections.singletonList(source), XContentHelper.xContentType(source));
529+
if (name != null) {
530+
rewritten.setName(name);
531+
}
532+
return rewritten;
529533
}
530534
}
531535
GetRequest getRequest = new GetRequest(indexedDocumentIndex, indexedDocumentType, indexedDocumentId);
@@ -553,7 +557,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
553557
listener.onResponse(null);
554558
}, listener::onFailure));
555559
});
556-
return new PercolateQueryBuilder(field, documentType, documentSupplier::get);
560+
561+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType, documentSupplier::get);
562+
if (name != null) {
563+
rewritten.setName(name);
564+
}
565+
return rewritten;
557566
}
558567

559568
@Override
@@ -661,6 +670,10 @@ XContentType getXContentType() {
661670
return documentXContentType;
662671
}
663672

673+
public String getQueryName() {
674+
return name;
675+
}
676+
664677
static IndexSearcher createMultiDocumentSearcher(Analyzer analyzer, Collection<ParsedDocument> docs) {
665678
RAMDirectory ramDirectory = new RAMDirectory();
666679
try (IndexWriter indexWriter = new IndexWriter(ramDirectory, new IndexWriterConfig(analyzer))) {

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import java.util.List;
6565
import java.util.Map;
6666
import java.util.Set;
67+
import java.util.function.Supplier;
6768

6869
import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO;
6970
import static org.hamcrest.Matchers.equalTo;
@@ -397,4 +398,29 @@ public void testFieldAlias() throws IOException {
397398
assertEquals(query.getCandidateMatchesQuery(), aliasQuery.getCandidateMatchesQuery());
398399
assertEquals(query.getVerifiedMatchesQuery(), aliasQuery.getVerifiedMatchesQuery());
399400
}
401+
402+
public void testSettingNameWhileRewriting() {
403+
String testName = "name1";
404+
QueryShardContext shardContext = createShardContext();
405+
PercolateQueryBuilder percolateQueryBuilder = doCreateTestQueryBuilder(true);
406+
percolateQueryBuilder.setName(testName);
407+
408+
QueryBuilder rewrittenQueryBuilder = percolateQueryBuilder.doRewrite(shardContext);
409+
410+
assertEquals(testName, ((PercolateQueryBuilder) rewrittenQueryBuilder).getQueryName());
411+
assertNotEquals(rewrittenQueryBuilder, percolateQueryBuilder);
412+
}
413+
414+
public void testSettingNameWhileRewritingWhenDocumentSupplierAndSourceNotNull() {
415+
Supplier<BytesReference> supplier = () -> new BytesArray("{\"test\": \"test\"}");
416+
String testName = "name1";
417+
QueryShardContext shardContext = createShardContext();
418+
PercolateQueryBuilder percolateQueryBuilder = new PercolateQueryBuilder(queryField, null, supplier);
419+
percolateQueryBuilder.setName(testName);
420+
421+
QueryBuilder rewrittenQueryBuilder = percolateQueryBuilder.doRewrite(shardContext);
422+
423+
assertEquals(testName, ((PercolateQueryBuilder) rewrittenQueryBuilder).getQueryName());
424+
assertNotEquals(rewrittenQueryBuilder, percolateQueryBuilder);
425+
}
400426
}

0 commit comments

Comments
 (0)