Laravel Scout:仅在特定字段更改时更新

Laravel Scout: Only update when specific fields change

我正在尝试通过仅在我关心的数据发生变化时更新我的​​ Algolia 记录(从而节省数千次不必要的操作)来优化我的应用程序。

我有一个 table 保存各种产品的价格信息,价格变化时每分钟更新一次。目前,Algolia 中的可搜索模型按预期与此保持同步,但这是不必要的,因为我网站上的搜索功能只提供产品本身的搜索,而不是价格。

目前,每次在模型上调用 update() 方法时,Scout 都会在 Algolia 中执行一次操作(在 each 模型上每分钟一次)。

有没有一种方法可以有条件地触发 Algolia 仅在模型的制造商、产品或变体发生变化而不是价格发生变化时进行更新?

我模型上的 toSearchableArray() 函数目前看起来像这样,如果有帮助的话:

public function toSearchableArray() {

            return [
                'id'                    => $this->id,
                'manufacturer'          => $this->manufacturer,
                'product'               => $this->product,
                'variant'               => $this->variant,
            ];
        }

withoutSyncingToSearchmethod是您要找的吗?

这意味着在您当前使用此方法更新价格的任何地方换行。

虽然您的问题中未提供此代码,但我假设如下:

\App\Model::withoutSyncingToSearch ( function() use ($item, $newPrice) {
    $item->price = $newPrice;
    $item->save();
});

对你有用吗?

将以下函数添加到您的模型中:

public function searchIndexShouldBeUpdated()
{
    if (empty(array_intersect_key( $this->getChanges(),$this->toSearchableArray() )))
    {
        return false;
    } else {
        return true;
    }
}

它将检查上次更新是否更改了可搜索数组中的任何属性,并且仅在进行了此类更新时才更新搜索索引。