code: def save(self, using=None):
          
          if not self.exists(using=using):
              return self.create(using=using)
  
          body = self.to_dict()
          settings = body.pop('settings', {})
          analysis = settings.pop('analysis', None)
          current_settings = self.get_settings(using=using)[self._name]['settings']['index']
          if analysis:
              if self.is_closed(using=using):
                  # closed index, update away
                  settings['analysis'] = analysis
              else:
                  # compare analysis definition, if all analysis objects are
                  # already defined as requested, skip analysis update and
                  # proceed, otherwise raise IllegalOperation
                  existing_analysis = current_settings.get('analysis', {})
                  if any(
                      existing_analysis.get(section, {}).get(k, None) != analysis[section][k]
                      for section in analysis
                      for k in analysis[section]
                  ):
                      raise IllegalOperation(
                          'You cannot update analysis configuration on an open index, you need to close index %s first.' % self._name)
  
          # try and update the settings
          if settings:
              settings = settings.copy()
              for k, v in list(settings.items()):
                  if k in current_settings and current_settings[k] == str(v):
                      del settings[k]
  
              if settings:
                  self.put_settings(using=using, body=settings)
  
          # update the mappings, any conflict in the mappings will result in an
          # exception
          mappings = body.pop('mappings', {})
          if mappings:
              self.put_mapping(using=using, body=mappings)
docs: Sync the index definition with elasticsearch, creating the index if it
          doesn't exist and updating its settings and mappings if it does.
  
          Note some settings and mapping changes cannot be done on an open
          index (or at all on an existing index) and for those this method will
          fail with the underlying exception.