diff --git a/src/main/java/org/elasticsearch/search/highlight/HighlightBuilder.java b/src/main/java/org/elasticsearch/search/highlight/HighlightBuilder.java index e15865cbb83..4382a601a0a 100644 --- a/src/main/java/org/elasticsearch/search/highlight/HighlightBuilder.java +++ b/src/main/java/org/elasticsearch/search/highlight/HighlightBuilder.java @@ -353,7 +353,7 @@ public class HighlightBuilder implements ToXContent { builder.field("options", field.options); } if (field.forceSource != null) { - builder.field("force_source", forceSource); + builder.field("force_source", field.forceSource); } builder.endObject(); diff --git a/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java b/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java index 14a7469c8fe..f0ef5124283 100644 --- a/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java +++ b/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java @@ -24,6 +24,7 @@ import org.apache.lucene.util.LuceneTestCase.Slow; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.*; +import org.elasticsearch.client.Requests; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings.Builder; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -509,19 +510,27 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { } @Test - public void testPlainHighlighterForceSource() throws Exception { - prepareCreate("test") - .addMapping("type1", "field1", "type=string,store=yes,term_vector=with_positions_offsets,index_options=offsets") - .get(); + public void testForceSourceWithSourceDisabled() throws Exception { + + assertAcked(client().admin().indices().prepareCreate("test") + .addMapping("type1", jsonBuilder().startObject().startObject("type1") + //just to make sure that we hit the stored fields rather than the _source + .startObject("_source").field("enabled", false).endObject() + .startObject("properties") + .startObject("field1").field("type", "string").field("store", "yes").field("index_options", "offsets") + .field("term_vector", "with_positions_offsets").endObject() + .endObject().endObject().endObject())); + ensureGreen(); client().prepareIndex("test", "type1") .setSource("field1", "The quick brown fox jumps over the lazy dog").get(); refresh(); + //works using stored field SearchResponse searchResponse = client().prepareSearch("test") .setQuery(termQuery("field1", "quick")) - .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("fvh").forceSource(true)) + .addHighlightedField(new Field("field1").preTags("").postTags("")) .get(); assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); @@ -529,31 +538,32 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { .setQuery(termQuery("field1", "quick")) .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("plain").forceSource(true)) .get(); - assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); + assertThat(searchResponse.getFailedShards(), equalTo(1)); + assertThat(searchResponse.getShardFailures().length, equalTo(1)); + assertThat(searchResponse.getShardFailures()[0].reason(), containsString("source is forced for field [field1] but type [type1] has disabled _source")); + + searchResponse = client().prepareSearch("test") + .setQuery(termQuery("field1", "quick")) + .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("fvh").forceSource(true)) + .get(); + assertThat(searchResponse.getFailedShards(), equalTo(1)); + assertThat(searchResponse.getShardFailures().length, equalTo(1)); + assertThat(searchResponse.getShardFailures()[0].reason(), containsString("source is forced for field [field1] but type [type1] has disabled _source")); searchResponse = client().prepareSearch("test") .setQuery(termQuery("field1", "quick")) .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("postings").forceSource(true)) .get(); - assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); + assertThat(searchResponse.getFailedShards(), equalTo(1)); + assertThat(searchResponse.getShardFailures().length, equalTo(1)); + assertThat(searchResponse.getShardFailures()[0].reason(), containsString("source is forced for field [field1] but type [type1] has disabled _source")); - searchResponse = client().prepareSearch("test") - .setQuery(termQuery("field1", "quick")) - .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("fvh").forceSource(false)) - .get(); - assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); - - searchResponse = client().prepareSearch("test") - .setQuery(termQuery("field1", "quick")) - .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("plain").forceSource(false)) - .get(); - assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); - - searchResponse = client().prepareSearch("test") - .setQuery(termQuery("field1", "quick")) - .addHighlightedField(new Field("field1").preTags("").postTags("").highlighterType("postings").forceSource(false)) - .get(); - assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); + SearchSourceBuilder searchSource = SearchSourceBuilder.searchSource().query(termQuery("field1", "quick")) + .highlight(highlight().forceSource(true).field("field1")); + searchResponse = client().search(Requests.searchRequest("test").source(searchSource)).get(); + assertThat(searchResponse.getFailedShards(), equalTo(1)); + assertThat(searchResponse.getShardFailures().length, equalTo(1)); + assertThat(searchResponse.getShardFailures()[0].reason(), containsString("source is forced for field [field1] but type [type1] has disabled _source")); } @Test