anchor.diff:  If OVERWRITE is true, an existing record with the same key field will be
   replaced with DOC, if any.
   
  +The value associated with each key can be a string, symbol, boolean,
  +real number, date-time, or a nonempty list of them.   Boolean value is
  +converted to 'true' or 'false'.  Strings and symbols are passed to Solr
  +as strings.  Reals are passed as numbers, and Data-time is converted to
  +iso8601 format Solr expects.  If it is a nonempty list, it is passed
  +as multiple values with the same key.  (An empty list is treated as a
  +boolean false).
  +
   Example:
  -  (solr-add solr '((id . 1234) (name . \"foo\")
  -                   (text . \"Lorem ipsum dolor sit amet, consectetur
  +  (solr-add solr '((:id . 1234) (:name . \"foo\")
  +                   (:text . \"Lorem ipsum dolor sit amet, consectetur
      adipisicing elit, sed do eiusmod tempor incididunt ut labore et
      dolore magna aliqua.\"))
                    :commit t)
  
positive.code:                                         (search-name "select")
                                          (score t)
                                          (sort nil)
                                          (param-alist nil))
    "Searches documents according to the given QUERY.
  Returns LXML representation of the Solr server response.
  FIELDS specifies which fields to be included in the results; the default
  is \"*\".
  SEARCH-NAME names the name of the customized search; if omitted,
  the default \"select\" search is used."
    (let ((uri (format nil "~a/~a" (solr-uri solr) search-name))
          (q `((q . ,query)
               (fields . ,fields)
  
negative.code:     else (loop for (key . val) in rec do (render-field key val))))
  
  (defun render-field (key val)
    (if* (consp val)
      then (dolist (v val) (render-field key v))
      else ^((field @name key) @(render-value val))))
  
  (defun render-value (val)
    (etypecase val
      (number val)
      (boolean (xbool val))
      (string val)
      (symbol val)
      (date-time
  