docs: def get_hash_for(self, value):
          """Get hash for a given value.
  
          :param value: The value to be indexed
          :type value: object
          :return: Hashed value
          :rtype: str
  
          """
          if isinstance(value,dict) and '__ref__' in value:
              return self.get_hash_for(value['__ref__'])
          serialized_value = self._serializer(value)
          if isinstance(serialized_value, dict):
              # Hash each item and return the hash of all the hashes
              return hash(frozenset([
                  self.get_hash_for(x)
                  for x in serialized_value.items()
              ]))
          elif isinstance(serialized_value, (list,tuple)):
              # Hash each element and return the hash of all the hashes
              return hash(tuple([
                  self.get_hash_for(x) for x in serialized_value
              ]))
          return value