code: def softClearFindAndRebuild(self):
          
          logger.info('Soft cleaning and rebuilding %s...' % self.id)
          try:
              at = getToolByName(self, 'archetype_tool')
              types = [k for k, v in at.catalog_map.items()
                       if self.id in v]
              self.counter = 0
              self.manage_catalogClear()
              # Getting UID catalog
              portal = getToolByName(self, 'portal_url').getPortalObject()
              uid_c = getToolByName(portal, 'uid_catalog')
              brains = uid_c(portal_type=types)
              self.total = len(brains)
              for brain in brains:
                  obj = brain.getObject()
                  self.catalog_object(
                      obj, idxs=self.indexes(),
                      update_metadata=True)
                  self.counter += 1
                  if self.counter % 100 == 0:
                      logger.info(
                          'Progress: {}/{} objects have been cataloged for {}.'
                              .format(self.counter, self.total, self.id))
                      if self.counter % 1000 == 0:
                          transaction.commit()
                          logger.info(
                              '{0} items processed.'
                                  .format(self.counter))
              transaction.commit()
              logger.info(
                  '{0} items processed.'
                      .format(self.counter))
          except:
              logger.error(traceback.format_exc())
              e = sys.exc_info()
              logger.error(
                  "Unable to clean and rebuild %s due to: %s" % (self.id, e))
          logger.info('%s cleaned and rebuilt' % self.id)
docs: Empties catalog, then finds all contentish objects quering over
              uid_catalog and reindexes them.
              This may take a long time and will not care about missing
              objects in uid_catalog.