From a3122a88e4f4afd8e7a834c115f4f93064b71f99 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Tue, 22 Oct 2013 18:04:22 -0700 Subject: [PATCH] Java API: Setting track scores does not affect scan search type When setting track scores, the scan search type will return the scores for each document. The Java API builder does not properly set this value (it only sets it if a sort in in place, which is not relevant for scan search type). closes #3949 --- .../search/builder/SearchSourceBuilder.java | 7 ++++--- .../search/scan/SearchScanScrollingTests.java | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java b/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java index af419eac82f..e95060db058 100644 --- a/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java +++ b/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java @@ -753,9 +753,10 @@ public class SearchSourceBuilder implements ToXContent { builder.endObject(); } builder.endArray(); - if (trackScores) { - builder.field("track_scores", trackScores); - } + } + + if (trackScores) { + builder.field("track_scores", trackScores); } if (indexBoost != null) { diff --git a/src/test/java/org/elasticsearch/search/scan/SearchScanScrollingTests.java b/src/test/java/org/elasticsearch/search/scan/SearchScanScrollingTests.java index 8c71d0347f4..60d0a62e1f4 100644 --- a/src/test/java/org/elasticsearch/search/scan/SearchScanScrollingTests.java +++ b/src/test/java/org/elasticsearch/search/scan/SearchScanScrollingTests.java @@ -32,14 +32,15 @@ import java.util.Set; import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; public class SearchScanScrollingTests extends AbstractIntegrationTest { - + public void testRandomized() throws Exception { - testScroll(between(1, 4), atLeast(100), between(1, 300), getRandom().nextBoolean()); + testScroll(between(1, 4), atLeast(100), between(1, 300), getRandom().nextBoolean(), getRandom().nextBoolean()); } - private void testScroll(int numberOfShards, long numberOfDocs, int size, boolean unbalanced) throws Exception { + private void testScroll(int numberOfShards, long numberOfDocs, int size, boolean unbalanced, boolean trackScores) throws Exception { client().admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", numberOfShards)).get(); ensureGreen(); @@ -72,10 +73,11 @@ public class SearchScanScrollingTests extends AbstractIntegrationTest { .setQuery(matchAllQuery()) .setSize(size) .setScroll(TimeValue.timeValueMinutes(2)) + .setTrackScores(trackScores) .execute().actionGet(); try { assertHitCount(searchResponse, numberOfDocs); - + // start scrolling, until we get not results while (true) { searchResponse = client().prepareSearchScroll(searchResponse.getScrollId()).setScroll(TimeValue.timeValueMinutes(2)).execute().actionGet(); @@ -84,12 +86,17 @@ public class SearchScanScrollingTests extends AbstractIntegrationTest { for (SearchHit hit : searchResponse.getHits()) { assertThat(hit.id() + "should not exist in the result set", ids.contains(hit.id()), equalTo(false)); ids.add(hit.id()); + if (trackScores) { + assertThat(hit.getScore(), greaterThan(0.0f)); + } else { + assertThat(hit.getScore(), equalTo(0.0f)); + } } if (searchResponse.getHits().hits().length == 0) { break; } } - + assertThat(expectedIds, equalTo(ids)); } finally { clearScroll(searchResponse.getScrollId());