docs: def update_book(self, id, body, doc_type='book'):
          ''' Update a book
  
              The "body" is merged with the current one.
              Yes, it is NOT overwritten.
  
              In case of concurrency conflict
              this function could raise `elasticsearch.ConflictError`
          '''
          # note that we are NOT overwriting all the _source, just merging
          book = self.get_book_by_id(id)
          book['_source'].update(body)
          validated = validate_book(book['_source'])
          ret = self.es.index(index=self.index_name, id=id,
                              doc_type=doc_type, body=validated, version=book['_version'])
          return ret