Index: PhraseQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/PhraseQuery.java,v
retrieving revision 1.5
diff -u -r1.5 PhraseQuery.java
--- PhraseQuery.java	3 Sep 2002 21:13:32 -0000	1.5
+++ PhraseQuery.java	23 Oct 2002 21:23:00 -0000
@@ -61,11 +61,12 @@
 import org.apache.lucene.index.TermDocs;
 import org.apache.lucene.index.TermPositions;
 import org.apache.lucene.index.IndexReader;
+import java.util.*;
 
 /** A Query that matches documents containing a particular sequence of terms.
   This may be combined with other terms with a {@link BooleanQuery}.
   */
-public class PhraseQuery extends Query {
+public class PhraseQuery extends Query implements Cloneable {
   private String field;
   private Vector terms = new Vector();
   private float idf = 0.0f;
@@ -73,6 +74,18 @@
 
   private int slop = 0;
 
+  public Object clone()
+  {
+      PhraseQuery pq = new PhraseQuery();
+      pq.field = field;
+      pq.idf = idf;
+      pq.weight = weight;
+      for(Iterator it = terms.iterator(); it.hasNext(); )
+      {
+          terms.add(((Term)it.next()).clone());
+      }
+      return pq;
+  }
 
   /** Constructs an empty phrase query. */
   public PhraseQuery() {
@@ -105,7 +118,39 @@
 	("All phrase terms must be in the same field: " + term);
 
     terms.addElement(term);
+
   }
+
+  /**
+   * @return the field name
+   */
+  public String getField()
+  {
+      return field;
+  }
+
+  /**
+   * sets the field for the whole query
+   * @param field the new field name
+   */
+  public void setField(String field)
+  {
+      this.field = field;
+      for(Iterator it = this.getTerms(); it.hasNext(); )
+      {
+          ((Term)it.next()).setField(field);
+      }
+  }
+
+  /**
+   * beware that changing the terms in the fields may corrupt the phrase query
+   * @return an Iterator<Term>
+   */
+  public Iterator getTerms()
+  {
+      return terms.iterator();
+  }
+
 
   final float sumOfSquaredWeights(Searcher searcher) throws IOException {
     idf = 0.0f;
