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

问题描述 投票:0回答:2

我正在使用Algolia搜索的迷你网站,我想在模型'项目'中搜索项目(表示名称'项目')。这是我在Controller中的代码:

    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"

然后,它工作正常。但是当我插入一个新项目时,我无法搜索该新项目。我试过这个代码配置“索引”(我认为它可以帮助),但它总是显示错误:(

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

错误是:

Index posts_index does not exist

要么

indexName is not valid

我可以有任何方法来配置它吗?

php laravel algolia
2个回答
2
投票

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


0
投票

配置模型索引

每个Eloquent模型与给定的搜索“索引”同步,该索引包含该模型的所有可搜索记录。换句话说,您可以将每个索引视为MySQL表。默认情况下,每个模型将持久保存到与模型的典型“表”名称匹配的索引。通常,这是模型名称的复数形式;但是,您可以通过覆盖模型上的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”并尝试它

© www.soinside.com 2019 - 2024. All rights reserved.