'Adds or updates documents.
Requires ``docs``, which is a list of dictionaries. Each key is the
field name and each value is the value to index.
Optionally accepts ``commit``. Default is ``True``.
Optionally accepts ``softCommit``. Default is ``False``.
Optionally accepts ``boost``. Default is ``None``.
Optionally accepts ``fieldUpdates``. Default is ``None``.
Optionally accepts ``commitWithin``. Default is ``None``.
Optionally accepts ``waitFlush``. Default is ``None``.
Optionally accepts ``waitSearcher``. Default is ``None``.
Optionally accepts ``overwrite``. Default is ``None``.
Usage::
solr.add([
"id": "doc_1",
"title": "A test document",
"id": "doc_2",
"title": "The Banana: Tasty or Dangerous?",'

def add(self, docs, boost=None, fieldUpdates=None, commit=True, softCommit=False, commitWithin=None, waitFlush=None, waitSearcher=None, overwrite=None, handler=u'update'):

    start_time = time.time()
    self.log.debug(u'Starting    to    build    add    request...')
    message = ElementTree.Element(u'add')
    if commitWithin:
        message.set(u'commitWithin', commitWithin)
    for doc in docs:
        el = self._build_doc(doc, boost=boost, fieldUpdates=fieldUpdates)
        message.append(el)
    m = ElementTree.tostring(message, encoding=u'utf-8')
    m = force_unicode(m)
    end_time = time.time()
    self.log.debug(u'Built    add    request    of    %s    docs    in    %0.2f    seconds.', len(message), (end_time - start_time))
    return self._update(m, commit=commit, softCommit=softCommit, waitFlush=waitFlush, waitSearcher=waitSearcher, overwrite=overwrite, handler=handler)
