在 Symfony 2.8 中更新时,Algolia 不索引相关实体
Algolia not indexing related entities when updating in Symfony 2.8
我有一个产品实体,它有 6 个属性应该被 Algolia 索引(名称、slug、描述、类别、超市、图像)。
当我创建一个新产品时,一切正常,并按如下所示进行索引:
{
"name": "White Bread",
"slug": "white-bread",
"description": "This is a description",
"image": "logo.png",
"supermarkets": [
"Unassigned",
"Unassigned"
],
"categories": [
"Bread",
"Unassigned"
],
"objectID": "eyJpZCI6MX0="
}
但是,如果我去专门编辑超市和类别然后保存,保存时它们不会索引到 algolia。但是,如果我更改任何其他属性(例如名称),那么我对类别或超市所做的更改将更新到 algolia 索引。
这是我从产品中获取类别的方法:
/**
* @Algolia\Attribute(algoliaName="supermarkets")
*/
public function getSupermarkets()
{
$supermarkets = array();
foreach($this->instances as $instance){
$supermarkets[] = $instance->getSupermarketName();
}
return $supermarkets;
}
如果有人对此有解决方案或任何建议,将不胜感激,我认为这可能是因为超市和类别来自另一个未编入索引但尚未设法找到解决方案的实体。
谢谢
我假设您正在使用 algolia/algolia-search-bundle
,它将利用 Doctrine Event Subscriber 为您的实体编制索引。
当您编辑直接存储在实体本身上的实体字段时,会调用原则订阅者,这会导致您的索引得到更新。
但是,当您更新相关实体时,不会调用主实体上的订阅者。您需要让主实体上的订阅者执行其操作,这将更新您的索引。
我建议为相关实体的更新创建条令事件订阅者,并在类别或超市更新时触发自定义事件。在您的自定义事件处理程序中,您会找到相关产品并更新其上的某些字段(更新计数器?)。这样就可以了。
我有一个产品实体,它有 6 个属性应该被 Algolia 索引(名称、slug、描述、类别、超市、图像)。
当我创建一个新产品时,一切正常,并按如下所示进行索引:
{
"name": "White Bread",
"slug": "white-bread",
"description": "This is a description",
"image": "logo.png",
"supermarkets": [
"Unassigned",
"Unassigned"
],
"categories": [
"Bread",
"Unassigned"
],
"objectID": "eyJpZCI6MX0="
}
但是,如果我去专门编辑超市和类别然后保存,保存时它们不会索引到 algolia。但是,如果我更改任何其他属性(例如名称),那么我对类别或超市所做的更改将更新到 algolia 索引。
这是我从产品中获取类别的方法:
/**
* @Algolia\Attribute(algoliaName="supermarkets")
*/
public function getSupermarkets()
{
$supermarkets = array();
foreach($this->instances as $instance){
$supermarkets[] = $instance->getSupermarketName();
}
return $supermarkets;
}
如果有人对此有解决方案或任何建议,将不胜感激,我认为这可能是因为超市和类别来自另一个未编入索引但尚未设法找到解决方案的实体。
谢谢
我假设您正在使用 algolia/algolia-search-bundle
,它将利用 Doctrine Event Subscriber 为您的实体编制索引。
当您编辑直接存储在实体本身上的实体字段时,会调用原则订阅者,这会导致您的索引得到更新。
但是,当您更新相关实体时,不会调用主实体上的订阅者。您需要让主实体上的订阅者执行其操作,这将更新您的索引。
我建议为相关实体的更新创建条令事件订阅者,并在类别或超市更新时触发自定义事件。在您的自定义事件处理程序中,您会找到相关产品并更新其上的某些字段(更新计数器?)。这样就可以了。