使用 FOSelastica TransformEvent 定义 elasticsearch 字段类型
Define elasticsearch field type using FOSelastica TransformEvent
我正在处理一个使用 FOS Elastica Bundle 的现有 Symfony 项目,尤其是 TransformEvent。
elastica.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'
);
}
我想将 'elements' 索引为嵌套的,就像 here 所解释的那样,但我不知道该怎么做。我试图更改 elastica.yml 中的映射但没有成功。
例如,这个 returns 错误:
types:
object:
mappings:
elements:
type: nested
etc.
=> Object of class Bundle\Entity\Element could not be converted to a string
所以,我想知道是否可以在 $document->set( 'elements', $elements ) 期间将 'elements' 类型定义为 'nested'; ?
感谢您的帮助!
字段 "elements"(我想设置为 "nested")在 "model" (Bundle\Entity\Object) 中不存在。但是,由于我使用此模型进行映射,因此必须如此。
TransformEvent 允许将自定义字段添加到映射中,但在这种情况下,它们的类型会自动设置。
我只需要在模型中放入一个新的 属性(没有注释,因为我不希望 属性 出现在数据库中)
Bundle\Entity\对象
/** some properties **/
private $elements;
/**
* Constructor stuff
**/
/**
* Set elements
*/
public function getElements()
{
return $this->elements;
}
elastica.yml
types:
object:
mappings:
elements:
type: nested
# etc.
我不知道这是否是使用 TransformEvent 的正确方法,但它对我有用。
我正在处理一个使用 FOS Elastica Bundle 的现有 Symfony 项目,尤其是 TransformEvent。
elastica.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'
);
}
我想将 'elements' 索引为嵌套的,就像 here 所解释的那样,但我不知道该怎么做。我试图更改 elastica.yml 中的映射但没有成功。 例如,这个 returns 错误:
types:
object:
mappings:
elements:
type: nested
etc.
=> Object of class Bundle\Entity\Element could not be converted to a string
所以,我想知道是否可以在 $document->set( 'elements', $elements ) 期间将 'elements' 类型定义为 'nested'; ?
感谢您的帮助!
字段 "elements"(我想设置为 "nested")在 "model" (Bundle\Entity\Object) 中不存在。但是,由于我使用此模型进行映射,因此必须如此。
TransformEvent 允许将自定义字段添加到映射中,但在这种情况下,它们的类型会自动设置。
我只需要在模型中放入一个新的 属性(没有注释,因为我不希望 属性 出现在数据库中)
Bundle\Entity\对象
/** some properties **/
private $elements;
/**
* Constructor stuff
**/
/**
* Set elements
*/
public function getElements()
{
return $this->elements;
}
elastica.yml
types:
object:
mappings:
elements:
type: nested
# etc.
我不知道这是否是使用 TransformEvent 的正确方法,但它对我有用。