Я работаю над существующим проектом Symfony, который использует FOS Elastica Bundle и особенно TransformEvent.
эластика.yml
types:
object:
mappings: ~
persistence:
identifier: id
driver: orm
model: Bundle\Entity\Object
listener: ~
provider: ~
finder: ~
слушатель
public function addCustomProperties(TransformEvent $event)
{
$document = $event->getDocument();
$object = $event->getObject();
/* elements */
$elementsList = $object->getElements();
$elements = [];
foreach($elementsList as $element)
{
$elements[] = array(
'id' => $element->getId(),
'value' => $element->getValue(),
'type' => $element->getType()
}
$document->set( 'elements', $elements );
}
public static function getSubscribedEvents() {
return array(
TransformEvent::POST_TRANSFORM => 'addCustomProperties'
);
}
Я хотел бы индексировать «элементы» как вложенные, как это объясняется здесь, но я не могу понять, как это сделать. Я безуспешно пытался изменить сопоставление в elastica.yml. Например, это возвращает ошибку:
types:
object:
mappings:
elements:
type: nested
etc.
=> Объект класса Bundle\Entity\Element не может быть преобразован в строку
Итак, мне было интересно, можно ли определить тип «элементов» как «вложенный» во время $document->set('elements', $elements); ?
Спасибо за любую помощь!