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