code: private function doMapFields(Content $content, ContentType $contentType, $languageCode, $maxDepth, $depth = 0)
      {
          $fields = [];
  
          foreach ($content->fields as $field) {
              if ($field->languageCode !== $languageCode) {
                  continue;
              }
  
              foreach ($contentType->fieldDefinitions as $fieldDefinition) {
                  if ($fieldDefinition->id !== $field->fieldDefinitionId) {
                      continue;
                  }
  
                  $fieldType = $this->fieldRegistry->getType($field->type);
                  $indexFields = $fieldType->getIndexData($field, $fieldDefinition);
  
                  foreach ($indexFields as $indexField) {
                      if ($indexField->value === null) {
                          continue;
                      }
  
                      if (!$indexField->type instanceof FieldType\FullTextField || !$fieldDefinition->isSearchable) {
                          continue;
                      }
  
                      $fields[] = new Field(
                          $this->getIndexFieldName($depth),
                          $indexField->value,
                          $this->getIndexFieldType($contentType)
                      );
                  }
              }
          }
  
          if ($depth < $maxDepth) {
              $relatedFields = $this->doMapRelatedFields($content, $languageCode, $maxDepth, $depth + 1);
              foreach ($relatedFields as $field) {
                  $fields[] = $field;
              }
          }
  
          return $fields;
      }
docs: @param \eZ\Publish\SPI\Persistence\Content $content
  @param \eZ\Publish\SPI\Persistence\Content\Type $contentType
  @param string $languageCode
  @param int $maxDepth
  @param int $depth
  
  @return \eZ\Publish\SPI\Search\Field[]
  
  @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException