Index: src/main/src/org/apache/lucene/queryParser/CompassQueryParser.java
===================================================================
--- src/main/src/org/apache/lucene/queryParser/CompassQueryParser.java	(revision 3916)
+++ src/main/src/org/apache/lucene/queryParser/CompassQueryParser.java	(working copy)
@@ -178,7 +178,21 @@
             termStr = termStr.toLowerCase();
         }
 
-        Term t = new Term(lookup.getPath(), termStr);
+        Term t = null;
+        try {
+            Analyzer prefixAnalyzer = searchEngineFactory.getAnalyzerManager().getPrefixAnalyzer();
+            if (prefixAnalyzer != null) {
+                org.apache.lucene.analysis.Token token = analyzer.tokenStream(field, new StringReader(termStr)).next(new org.apache.lucene.analysis.Token());
+                if (token != null) {
+                    t = new Term(lookup.getPath(), token.term());
+                }
+            }
+        } catch (IOException e) {
+            // ignore
+        }
+        if (t == null) {
+            t = new Term(lookup.getPath(), termStr);
+        }
         return QueryParserUtils.andAliasQueryIfNeeded(new ConstantScorePrefixQuery(t), lookup, addAliasQueryWithDotPath, searchEngineFactory);
     }
 
Index: src/main/src/org/compass/core/lucene/engine/analyzer/LuceneAnalyzerManager.java
===================================================================
--- src/main/src/org/compass/core/lucene/engine/analyzer/LuceneAnalyzerManager.java	(revision 3916)
+++ src/main/src/org/compass/core/lucene/engine/analyzer/LuceneAnalyzerManager.java	(working copy)
@@ -52,6 +52,8 @@
     private Analyzer defaultAnalyzer;
 
     private Analyzer searchAnalyzer;
+    
+    private Analyzer prefixAnalyzer;
 
     private final HashMap<String, Analyzer> aliasAnalyzers = new HashMap<String, Analyzer>();
 
@@ -85,6 +87,13 @@
         } catch (Exception e) {
             // ignore
         }
+        if (prefixAnalyzer != null) {
+            try {
+                    prefixAnalyzer.close();
+            } catch (Exception e) {
+                // ignore
+            }
+        }
     }
 
     private void buildAnalyzersFilters(CompassSettings settings) {
@@ -137,6 +146,7 @@
         if (searchAnalyzer == null) {
             searchAnalyzer = defaultAnalyzer;
         }
+        prefixAnalyzer = analyzers.get(LuceneEnvironment.Analyzer.PREFIX_GROUP);
         // build the analyzers for the different resources
         buildAnalyzerPerAlias(mapping);
     }
@@ -169,6 +179,13 @@
     }
 
     /**
+     * Returns the prefix Lucene {@link Analyzer} or null if not configured.
+     */
+    public Analyzer getPrefixAnalyzer() {
+        return prefixAnalyzer;
+    }
+    
+    /**
      * Returns the Lucene {@link Analyzer} registed under the given name.
      */
     public Analyzer getAnalyzer(String analyzerName) {
Index: src/main/src/org/compass/core/lucene/LuceneEnvironment.java
===================================================================
--- src/main/src/org/compass/core/lucene/LuceneEnvironment.java	(revision 3916)
+++ src/main/src/org/compass/core/lucene/LuceneEnvironment.java	(working copy)
@@ -71,6 +71,12 @@
         public static final String SEARCH_GROUP = "search";
 
         /**
+         * An optional analyzer group name that can be set, will be used for
+         * prefix terms.
+         */
+        public static final String PREFIX_GROUP = "prefix";
+        
+        /**
          * The name of the analyzer to use, can be ANALYZER_WHITESPACE,
          * ANALYZER_STANDARD, ANALYZER_SIMPLE, ANALYZER_STOP, a fully
          * qualified class of the analyzer ({@link Analyzer} or an instnace of it.

