protected function validateAndCompleteHit($hitIdentifier, array &$hitDefinition)
	{
		$this->addRequiredHit($hitIdentifier);

		if(!isset($hitDefinition['scoreFactor']))
		{
			$this->setHitScoreFactor($hitIdentifier, 1);
		}
		elseif(!settype($hitDefinition['scoreFactor'], 'integer'))
		{
			throw MappingException::invalidMappingType($this->itemClass, 'scoreFactor', 'integer', $hitIdentifier);
		}
		else
		{
			$this->setHitScoreFactor($hitIdentifier, $hitDefinition['scoreFactor']);
		}

		//Defaut non sortable, non added to $this->sortableHits
		if(isset($hitDefinition['sortable']) && !settype($hitDefinition['sortable'], 'boolean'))
		{
			throw MappingException::invalidMappingType($this->itemClass, 'sortable', 'boolean', $hitIdentifier);
		}
		elseif(isset($hitDefinition['sortable']) && $hitDefinition['sortable'] === true)
		{
			$this->addSortableHit($hitIdentifier);
		}

		if(!isset($hitDefinition['label']))
		{
			throw MappingException::requiredMapping($this->itemClass, 'label', $hitIdentifier);
		}
		elseif(!settype($hitDefinition['label'], 'string'))
		{
			throw MappingException::invalidMappingType($this->itemClass, 'label', 'string', $hitIdentifier);
		}
		else
		{
			$this->hitLabels[$hitIdentifier] = $hitDefinition['label'];
		}

		foreach($hitDefinition['mapping'] as $entityIdentifier => $attribute)
		{
			$this->setHitEntityAttribute($hitIdentifier, $entityIdentifier, $attribute);
		}
	}