Index: QueryParser.jj =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj,v retrieving revision 1.54 diff -u -r1.54 QueryParser.jj --- QueryParser.jj 15 Oct 2004 19:47:43 -0000 1.54 +++ QueryParser.jj 10 Nov 2004 17:00:23 -0000 @@ -315,10 +315,11 @@ // Use the analyzer to get all the tokens, and then build a TermQuery, // PhraseQuery, or nothing based on the term count - TokenStream source = analyzer.tokenStream(field, - new StringReader(queryText)); + TokenStream source = analyzer.tokenStream(field, new StringReader(queryText)); Vector v = new Vector(); org.apache.lucene.analysis.Token t; + int positionCount = 0; + boolean severalTokensAtSamePosition = false; while (true) { try { @@ -329,7 +330,11 @@ } if (t == null) break; - v.addElement(t.termText()); + v.addElement(t); + if (t.getPositionIncrement() == 1) + positionCount++; + else + severalTokensAtSamePosition = true; } try { source.close(); @@ -340,15 +345,48 @@ if (v.size() == 0) return null; - else if (v.size() == 1) - return new TermQuery(new Term(field, (String) v.elementAt(0))); - else { - PhraseQuery q = new PhraseQuery(); - q.setSlop(phraseSlop); - for (int i=0; i 0) { + mpq.add((Term[])multiTerms.toArray(new Term[0])); + multiTerms.clear(); + } + multiTerms.add(new Term(field, t.termText())); + } + mpq.add((Term[])multiTerms.toArray(new Term[0])); + return mpq; + } + } + else { + PhraseQuery q = new PhraseQuery(); + q.setSlop(phraseSlop); + for (int i = 0; i < v.size(); i++) { + q.add(new Term(field, ((org.apache.lucene.analysis.Token) + v.elementAt(i)).termText())); + + } + return q; } - return q; } } @@ -379,6 +417,9 @@ if (query instanceof PhraseQuery) { ((PhraseQuery) query).setSlop(slop); + } + if (query instanceof MultiPhraseQuery) { + ((MultiPhraseQuery) query).setSlop(slop); } return query;