我正在使用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
我可以有任何方法来配置它吗?
searchableAs
在Algolia中定义您的索引名称。此时,您在items
索引中导入了数据,并且您正在posts_index
中搜索。这就是你得到这个错误的原因。您需要删除searchableAs
覆盖或重新导入数据。
关于未更新的数据,可能是:
如果你运行$item->update()
它将更新Algolia。如果你做Item::update(['title' => 'new title'])
,你需要链接searchable()
方法。 https://laravel.com/docs/5.5/scout#updating-records
配置模型索引
每个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”并尝试它