Index: solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
===================================================================
--- solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java	(revision 1167006)
+++ solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java	(working copy)
@@ -364,7 +364,7 @@
         // FVH cannot process hl.requireFieldMatch parameter per-field basis
         params.getBool( HighlightParams.FIELD_MATCH, false ) );
     fvh.setPhraseLimit(params.getInt(HighlightParams.PHRASE_LIMIT, Integer.MAX_VALUE));
-    FieldQuery fieldQuery = fvh.getFieldQuery( query );
+    FieldQuery fieldQuery = fvh.getFieldQuery( query, searcher.getIndexReader() );
 
     // Highlight each document
     DocIterator iterator = docs.iterator();
Index: lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java
===================================================================
--- lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java	(revision 1167006)
+++ lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java	(working copy)
@@ -77,6 +77,8 @@
    * @return the created {@link FieldQuery} object
    */
   public FieldQuery getFieldQuery( Query query ) {
+    // TODO: should we deprecate this? 
+    // because if there is no reader, then we cannot rewrite MTQ.
     try {
       return new FieldQuery( query, null, phraseHighlight, fieldMatch );
     } catch (IOException e) {
Index: lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java
===================================================================
--- lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java	(revision 1167006)
+++ lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java	(working copy)
@@ -102,7 +102,7 @@
       if( !flatQueries.contains( sourceQuery ) )
         flatQueries.add( sourceQuery );
     }
-    else if (sourceQuery instanceof MultiTermQuery) {
+    else if (sourceQuery instanceof MultiTermQuery && reader != null) {
       MultiTermQuery copy = (MultiTermQuery) sourceQuery.clone();
       copy.setRewriteMethod(new MultiTermQuery.TopTermsScoringBooleanQueryRewrite(MAX_MTQ_TERMS));
       BooleanQuery mtqTerms = (BooleanQuery) copy.rewrite(reader);
