Skip to content

Commit c9722c4

Browse files
authored
Merge pull request elastic#19972 from jimferenczi/dfs_explain
Fix explain output for dfs query
2 parents 9f8f2ea + b73751a commit c9722c4

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

core/src/main/java/org/elasticsearch/search/internal/ContextIndexSearcher.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ public Weight createWeight(Query query, boolean needsScores) throws IOException
133133

134134
@Override
135135
public Explanation explain(Query query, int doc) throws IOException {
136+
if (aggregatedDfs != null) {
137+
// dfs data is needed to explain the score
138+
return super.explain(createNormalizedWeight(query, true), doc);
139+
}
136140
return in.explain(query, doc);
137141
}
138142

core/src/test/java/org/elasticsearch/search/basic/TransportTwoNodesSearchIT.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
6161
import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
6262
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
63+
import static org.hamcrest.Matchers.endsWith;
6364
import static org.hamcrest.Matchers.equalTo;
6465
import static org.hamcrest.Matchers.instanceOf;
6566
import static org.hamcrest.Matchers.lessThanOrEqualTo;
@@ -147,6 +148,10 @@ public void testDfsQueryThenFetch() throws Exception {
147148
for (int i = 0; i < hits.length; ++i) {
148149
SearchHit hit = hits[i];
149150
assertThat(hit.explanation(), notNullValue());
151+
assertThat(hit.explanation().getDetails().length, equalTo(1));
152+
assertThat(hit.explanation().getDetails()[0].getDetails().length, equalTo(2));
153+
assertThat(hit.explanation().getDetails()[0].getDetails()[0].getDescription(),
154+
endsWith("idf(docFreq=100, docCount=100)"));
150155
assertThat("id[" + hit.id() + "] -> " + hit.explanation().toString(), hit.id(), equalTo(Integer.toString(100 - total - i - 1)));
151156
}
152157
total += hits.length;
@@ -171,6 +176,10 @@ public void testDfsQueryThenFetchWithSort() throws Exception {
171176
for (int i = 0; i < hits.length; ++i) {
172177
SearchHit hit = hits[i];
173178
assertThat(hit.explanation(), notNullValue());
179+
assertThat(hit.explanation().getDetails().length, equalTo(1));
180+
assertThat(hit.explanation().getDetails()[0].getDetails().length, equalTo(2));
181+
assertThat(hit.explanation().getDetails()[0].getDetails()[0].getDescription(),
182+
endsWith("idf(docFreq=100, docCount=100)"));
174183
assertThat("id[" + hit.id() + "]", hit.id(), equalTo(Integer.toString(total + i)));
175184
}
176185
total += hits.length;
@@ -317,6 +326,10 @@ public void testDfsQueryAndFetch() throws Exception {
317326
SearchHit hit = searchResponse.getHits().hits()[i];
318327
// System.out.println(hit.shard() + ": " + hit.explanation());
319328
assertThat(hit.explanation(), notNullValue());
329+
assertThat(hit.explanation().getDetails().length, equalTo(1));
330+
assertThat(hit.explanation().getDetails()[0].getDetails().length, equalTo(2));
331+
assertThat(hit.explanation().getDetails()[0].getDetails()[0].getDescription(),
332+
endsWith("idf(docFreq=100, docCount=100)"));
320333
// assertThat("id[" + hit.id() + "]", hit.id(), equalTo(Integer.toString(100 - i - 1)));
321334
assertThat("make sure we don't have duplicates", expectedIds.remove(hit.id()), notNullValue());
322335
}

0 commit comments

Comments
 (0)