old_contents: # -*- coding: utf-8 -*-
  ##############################################################################
  #
  #    OpenERP, Open Source Management Solution
  #    This module copyright (C) 2015 Therp BV (<http://therp.nl>).
  #
  #    This program is free software: you can redistribute it and/or modify
  #    it under the terms of the GNU Affero General Public License as
  #    published by the Free Software Foundation, either version 3 of the
  #    License, or (at your option) any later version.
  #
  #    This program is distributed in the hope that it will be useful,
  #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #    GNU Affero General Public License for more details.
  #
  #    You should have received a copy of the GNU Affero General Public License
  #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  #
  ##############################################################################
  from openerp import models, api
  
  
  class IrAttachment(models.Model):
      _inherit = 'ir.attachment'
  
      @api.multi
      def document_reindex(self):
          for this in self:
              if not this.datas:
                  continue
              mimetype, indexed_content = this._index(
                  this.datas.decode('base64'), this.datas_fname, this.file_type)
              this.write({
                  'file_type': mimetype,
                  'index_content': indexed_content,
              })
  
      @api.model
      def document_reindex_all(self):
          self.search([('datas', '!=', False)]).document_reindex()
  
      @api.model
      def document_reindex_unindexed(self):
          self.search([
              ('datas', '!=', False),
              '|',
              ('index_content', '=', False),
              ('index_content', '=', ''),
          ]).document_reindex()
  
new_contents: # -*- coding: utf-8 -*-
  ##############################################################################
  #
  #    OpenERP, Open Source Management Solution
  #    This module copyright (C) 2015 Therp BV (<http://therp.nl>).
  #
  #    This program is free software: you can redistribute it and/or modify
  #    it under the terms of the GNU Affero General Public License as
  #    published by the Free Software Foundation, either version 3 of the
  #    License, or (at your option) any later version.
  #
  #    This program is distributed in the hope that it will be useful,
  #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #    GNU Affero General Public License for more details.
  #
  #    You should have received a copy of the GNU Affero General Public License
  #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  #
  ##############################################################################
  import logging
  from openerp import models, api
  _logger = logging.getLogger(__name__)
  
  
  class IrAttachment(models.Model):
      _inherit = 'ir.attachment'
  
      @api.multi
      def document_reindex(self):
          for this in self:
              if not this.datas:
                  continue
              try:
                  mimetype, indexed_content = this._index(
                      this.datas.decode('base64'),
                      this.datas_fname, this.file_type)
                  this.write({
                      'file_type': mimetype,
                      'index_content': indexed_content,
                  })
              except:
                  self.env.clear()
                  self.env.clear_recompute_old()
                  _logger.exception('ignoring attachment id %d', this.id)
                  continue
  
      @api.model
      def document_reindex_domain(self, domain, limit=100):
          offset = 0
          counter = 0
          limit = int(
              self.env['ir.config_parameter'].get_param(
                  'document_reindex.limit', '0')) or limit
          logging.info(
              'reindexing %d attachments', self.search(domain, count=True))
          while True:
              attachments = self.search(domain, limit=limit, offset=offset)
              if not attachments:
                  return
              attachments.document_reindex()
              logging.info('%d done', counter * limit + len(attachments))
              offset += len(attachments)
              counter += 1
  
      @api.model
      def document_reindex_all(self):
          return self.document_reindex_domain([('datas', '!=', False)])
  
      @api.model
      def document_reindex_unindexed(self):
          return self.document_reindex_domain([
              ('datas', '!=', False),
              '|',
              ('index_content', '=', False),
              ('index_content', '=', ''),
          ])
  
subject: support big amounts of attachments