Meilisearch-laravel-scout: 跳过按 ID 搜索

创建于 2021-04-06  ·  5评论  ·  资料来源: meilisearch/meilisearch-laravel-scout

你好,

为特定模型创建toSearchableArray ,如果最终数组中不包含ID ,则无法使用php artisan scout:import "App\Book"导入数据。 但是如果我包含ID ,那么它也可以通过ID进行搜索,这是我想逃避的行为。 通过ID禁用搜索的正确方法是什么?

示例代码:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

最有用的评论

@milosevicn

->toSearchableArray()定义了MeiliSearch 中特定文档(对象)的存储数据。 省略id将导致搜索中的不可发现元素,因为默认情况下id是用于标识文档的主键。

为了防止 Meil​​iSearch 搜索所有字段,请考虑扩展此包的功能并在 Meil​​iSearch 中设置searchAttributes 。 您可以在此处找到执行此操作的教程。

所有5条评论

@milosevicn

->toSearchableArray()定义了MeiliSearch 中特定文档(对象)的存储数据。 省略id将导致搜索中的不可发现元素,因为默认情况下id是用于标识文档的主键。

为了防止 Meil​​iSearch 搜索所有字段,请考虑扩展此包的功能并在 Meil​​iSearch 中设置searchAttributes 。 您可以在此处找到执行此操作的教程。

@mmachatschek抱歉打扰您,但我不想为此打开新问题。 这可能与我上面的问题有关。
当我使用php artisan scout:import命令添加文档时,一切都按预期工作,但是当我使用/indexes/:index_uid/documents路由( ->addDocuments() )做同样的事情时,它不尊重toSearchableArray()规则。 因此,如果我尝试添加整个模型,则会添加所有列。
我可能可以通过在查询时选择特定列来克服这个问题,但是有没有办法让函数addDocuments()本身意识到toSearchableArray()

@米洛舍维奇

这个包基本上是 Meil​​iSearch PHP 库的包装器,并扩展了 Laravel Scout。

当“手动”添加文档时,Scout 提供的所有魔法(例如向索引添加新对象或更新具有特定字段的现有对象等)都将丢失,因为您跳过了这些步骤。

您是否有通过手动添加文档的特定意图?

感谢您回复@mmachatschek

我有多租户应用程序 - 两个独立的应用程序(房东和租户)。 因此,一旦将某些内容添加到数据库中,我就无法使用预定义的 Laravel Scout 功能来自动更新文档。 这就是为什么我使用 webhook 来通知我的租户应用程序时,当房东的数据库中实际发生某些事情时(在创建/更新/删除时)。 一旦我在租户上捕获了 webhook,我想添加这些文档

@milosevicn我想你可以做一个$model->touch() 。 这会更新模型的 updated_at 列,并且将在租户应用程序上触发updated事件。 然后 Scout 事件侦听器将触发对索引的更新。 这对你有用吗?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

curquiza picture curquiza  ·  17评论

husonghua picture husonghua  ·  5评论

Kladislav picture Kladislav  ·  8评论

marky291 picture marky291  ·  6评论

desaintflorent picture desaintflorent  ·  8评论