Skip to content

Commit 16652ce

Browse files
committed
fixes elastic#40405, fixed ignoring name parameter for percolator queries
1 parent 70b4f67 commit 16652ce

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
@@ -178,7 +178,7 @@ public PercolateQueryBuilder(String field, String documentType, List<BytesRefere
178178
this.documentSupplier = null;
179179
}
180180

181-
private PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
181+
protected PercolateQueryBuilder(String field, String documentType, Supplier<BytesReference> documentSupplier) {
182182
if (field == null) {
183183
throw new IllegalArgumentException("[field] is a required argument");
184184
}
@@ -491,8 +491,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
491491
if (source == null) {
492492
return this; // not executed yet
493493
} else {
494-
return new PercolateQueryBuilder(field, documentType, Collections.singletonList(source),
495-
XContentHelper.xContentType(source));
494+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType,
495+
Collections.singletonList(source), XContentHelper.xContentType(source));
496+
if (name != null) {
497+
rewritten.setName(name);
498+
}
499+
return rewritten;
496500
}
497501
}
498502
GetRequest getRequest;
@@ -527,7 +531,12 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) {
527531
listener.onResponse(null);
528532
}, listener::onFailure));
529533
});
530-
return new PercolateQueryBuilder(field, documentType, documentSupplier::get);
534+
535+
PercolateQueryBuilder rewritten = new PercolateQueryBuilder(field, documentType, documentSupplier::get);
536+
if (name != null) {
537+
rewritten.setName(name);
538+
}
539+
return rewritten;
531540
}
532541

533542
@Override
@@ -626,6 +635,10 @@ XContentType getXContentType() {
626635
return documentXContentType;
627636
}
628637

638+
public String getQueryName() {
639+
return name;
640+
}
641+
629642
static IndexSearcher createMultiDocumentSearcher(Analyzer analyzer, Collection<ParsedDocument> docs) {
630643
RAMDirectory ramDirectory = new RAMDirectory();
631644
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
@@ -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)