anchor.diff:     (dir)
      (has-writes-p :initform NIL)
      (reader :initform nil)
  -   (writer :initform nil)
  +   (writer)
      (close-dir-p)
      (auto-flush-p)
      (default-search-field)
      (default-field)
      (analyzer)
  -   (open-p)
  +   (open-p :initform T)
      (options :initarg :options)
  -   (qp))
  +   (qp :initform nil))
     (:default-initargs
      :options '()))
      
   
  -(defmethod initialize-instance ((self index) &key path)
  -  (with-slots (dir close-dir-p create-p analyzer writer) self
  -    (cond (path
  -	   (assert (not dir))
  -	   (setf dir (make-fs-directory path create-p))
  -	   (setf close-dir-p T))
  -	  (dir
  -	   )
  -	  (T
  -	   (setf create-p T)
  +(defmethod initialize-instance ((self index) &rest args)
  +  (setf (getf args :default-search-field) (string (getf args :default-search-field))
  +	(getf args :default-field) (string (getf args :default-field)))
  +  (when (null (getf args :create-if-missing))
  +    (setf (getf args :create-if-missing) T))
  +  ;; FIXME: I don't flatten the :key option, I'm not sure why Ferret does.
  +  (with-slots (key dir options close-dir-p create-p analyzer writer) self
  +    (setf key (getf args :key))
  +    (cond ((getf args :path)
  +	   (setf dir (make-fs-directory (getf args :path) (getf options :create)))
  +	   (setf (getf args :close-dir) T))
  +	  ((getf args :dir)
  +	   (setf dir (getf args :dir)))
  +	  (T
  +	   (setf (getf args :create) T)
   	   (setf dir (make-instance 'ram-directory))))
  +    (setf options args)
       ;; Create the index if need be
       (setf writer (make-instance 'index-writer
   				:directory dir))
  -    (setf analyzer (analyzer writer))
  +    (setf (getf options :analyzer) (setf analyzer (analyzer writer)))
       (close writer)
  -    (setf writer nil)))
  +    (setf writer nil)
  +    ;; Only want to create the first time, if at all.
  +    (setf (getf options :create) NIL)
  +    (setf close-dir-p (getf options :close-dir))
  +    (setf (getf options :close-dir) NIL)
  +    (setf auto-flush-p (getf options :auto-flush))
  +    (setf default-search-field (or (getf options :default-search-field)
  +				   (getf options :default-field)
  +				   "*"))
  +    (setf default-field (or (getf options :default-field) ""))
  +    (when (not (getf options :handle-parse-errors))
  +      (setf (getf options :handle-parse-errors) T))))
  +    
   
   (defmethod close ((self index))
     (with-slots (open-p reader writer dir) self
  
positive.code:     (when (slot-value self 'auto-flush-p)
        (flush self))))
  
  
  (defmethod ensure-writer-open ((self index))
    (with-slots (open-p writer reader dir options searcher) self
  
negative.code: 	;; been added.
  	(setf (fields qp) (string (get-field-names reader)))
  	(parse qp query))
        query))
  