Skip to content

Commit

Permalink
Fix needsScore computation in GlobalOrdCardinalityAggregator
Browse files Browse the repository at this point in the history
  • Loading branch information
iverase committed Sep 18, 2024
1 parent 90e343c commit dc734af
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@
import org.elasticsearch.search.aggregations.InternalAggregation;
import org.elasticsearch.search.aggregations.bucket.filter.Filter;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.bucket.nested.InternalNested;
import org.elasticsearch.search.aggregations.bucket.nested.Nested;
import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.terms.LongTerms;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.CardinalityAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.Max;
import org.elasticsearch.search.aggregations.metrics.Stats;
import org.elasticsearch.search.aggregations.metrics.Sum;
Expand Down Expand Up @@ -890,4 +894,85 @@ public void testSyntheticSource() throws Exception {
assertEquals("a", nested.get("number"));
});
}

public void testScoring() throws Exception {
assertAcked(
prepareCreate("scoring").setMapping(
jsonBuilder().startObject()
.startObject("properties")
.startObject("tags")
.field("type", "nested")
.startObject("properties")
.startObject("key")
.field("type", "keyword")
.endObject()
.startObject("value")
.field("type", "keyword")
.endObject()
.endObject()
.endObject()
.endObject()
.endObject()
)
);
ensureGreen("scoring");

prepareIndex("scoring").setId("1")
.setSource(
jsonBuilder().startObject()
.startArray("tags")
.startObject()
.field("key", "state")
.field("value", "texas")
.endObject()
.endArray()
.endObject()
)
.get();
refresh("scoring");
prepareIndex("scoring").setId("2")
.setSource(
jsonBuilder().startObject()
.startArray("tags")
.startObject()
.field("key", "state")
.field("value", "utah")
.endObject()
.endArray()
.endObject()
)
.get();
refresh("scoring");
prepareIndex("scoring").setId("3")
.setSource(
jsonBuilder().startObject()
.startArray("tags")
.startObject()
.field("key", "state")
.field("value", "texas")
.endObject()
.endArray()
.endObject()
)
.get();
refresh("scoring");

assertResponse(
client().prepareSearch("scoring")
.setSize(0)
.addAggregation(
new NestedAggregationBuilder("tags", "tags").subAggregation(
new TermsAggregationBuilder("keys").field("tags.key")
.executionHint("map")
.subAggregation(new TermsAggregationBuilder("values").field("tags.value"))
.subAggregation(new CardinalityAggregationBuilder("values_count").field("tags.value"))
)
),
searchResponse -> {
InternalNested nested = searchResponse.getAggregations().get("tags");
assertThat(nested.getDocCount(), equalTo(3L));
assertThat(nested.getAggregations().asList().size(), equalTo(1));
}
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,10 @@ public GlobalOrdCardinalityAggregator(

@Override
public ScoreMode scoreMode() {
if (field != null && valuesSource.needsScores() == false && maxOrd <= MAX_FIELD_CARDINALITY_FOR_DYNAMIC_PRUNING) {
if (this.parent == null
&& field != null
&& valuesSource.needsScores() == false
&& maxOrd <= MAX_FIELD_CARDINALITY_FOR_DYNAMIC_PRUNING) {
return ScoreMode.TOP_DOCS;
} else if (valuesSource.needsScores()) {
return ScoreMode.COMPLETE;
Expand Down

0 comments on commit dc734af

Please sign in to comment.