如何在模型中为 Algolia 搜索配置索引 Laravel

How to configure index in model for Algolia search Laravel

我有一个带有 Algolia 搜索的迷你网站,我想搜索模型 'Item' 中的项目(表示 table 名称 'item')。这是我在控制器中的代码:

    public function search(Request $request) {
    $query = $request->only(['query']);

    $items = Item::search($query['query'])->paginate(12);
    $total = $items->count();

    return view('shop.search', [
        'items'      => $items,
        'total'      => $total,
    ]);
}

我能够搜索 运行 以下代码:

php artisan scout:import "App\Item"

然后,它工作正常。但是当我插入一个新项目时,我无法搜索那个新项目。我已经尝试使用此代码来配置 "Index"(我认为它可以提供帮助)但它总是显示错误 :(

 public function searchableAs()
{
    return 'posts_index';
}

错误是:

Index posts_index does not exist

indexName is not valid

有什么办法可以配置吗?

searchableAs 定义您在 Algolia 中的索引名称。此时,您在 items 索引中导入了数据,并且正在 posts_index 中进行搜索。这就是您收到此错误的原因。 您需要删除 searchableAs 覆盖或重新导入数据。

关于未更新的数据,可能是:

  • 您正在使用队列
  • 您正在更新数据 Eloquent

如果您 运行 $item->update() 它将更新 Algolia。如果你这样做 Item::update(['title' => 'new title']),你将需要链接 searchable() 方法。 https://laravel.com/docs/5.5/scout#updating-records

配置模型索引

每个 Eloquent 模型都与给定的搜索同步 "index",其中包含该模型的所有可搜索记录。换句话说,您可以将每个索引想象成 MySQL table。默认情况下,每个模型都将保存到与模型的典型 "table" 名称匹配的索引中。通常,这是型号名称的复数形式;但是,您可以通过覆盖模型上的 searchableAs 方法来自由自定义模型的索引:

<?php

        namespace App;

        use Laravel\Scout\Searchable;
        use Illuminate\Database\Eloquent\Model;

        class Post extends Model
        {
               use Searchable;

               /**
               * Get the index name for the model.
               *
               * @return string
               */
               public function searchableAs()
              {
                      return 'posts_index';
              }
 }

Algolia 新索引创建 "posts_index" 并尝试