【问题标题】:Algolia not indexing related entities when updating in Symfony 2.8在 Symfony 2.8 中更新时,Algolia 未索引相关实体
【发布时间】:2017-10-12 22:53:08
【问题描述】:

我有一个产品实体,它有 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;
}

如果有人对此有修复或任何建议,我将不胜感激,我认为这可能是因为超市和类别来自另一个未编入索引但尚未设法找到修复的实体。

谢谢

【问题讨论】:

  • 请张贴代码而不是图片。

标签: php symfony search methods algolia


【解决方案1】:

我假设您使用的是 algolia/algolia-search-bundle,它将利用 Doctrine Event Subscriber 来索引您的实体。

当您编辑直接存储在实体本身上的实体字段时,将调用学说订阅者,这会导致您的索引得到更新。

但是,当您更新相关实体时,不会调用主实体上的订阅者。您需要使主实体上的订阅者执行其操作,这将更新您的索引。

我建议为相关实体的更新创建原则事件订阅者,并在更新类别或超市时触发自定义事件。在您的自定义事件处理程序中,您会找到相关产品并更新其上的某些字段(更新计数器?)。这样就可以了。

【讨论】:

  • 谢谢你我会尝试这样做,我想这就是你在说什么? symfony.com/doc/2.8/doctrine/…
  • 我已经按照它所说的在该文档中进行设置,但不完全确定我应该如何处理“// ...对产品做一些事情”部分,我有这个pastebin.com/PzJpNVks 但不知道在编辑实体时如何触发?
  • 您不需要创建一个原则订阅者来监听postUpdate 实体上的postUpdate 事件。在处理程序中,您将分派您自己的自定义“category_updated”事件。下一步是创建您自己的自定义事件侦听器,该侦听器将侦听“category_updated”事件,找到相关的Product 实体并更新其中的某些字段。反过来,这将调用 Product 实体上的教义事件,该事件将更新您的索引。超市也是如此。该解决方案将同时使用 Doctrine 事件和 Symfony 内核事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2014-06-01
相关资源
最近更新 更多