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

时间:2017-10-19 13:32:47

标签: php laravel algolia

我正在使用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

我可以有任何方法进行配置吗?

2 个答案:

答案 0 :(得分:2)

seq.Date在Algolia中定义您的索引名称。此时,您在st <- as.Date("20140101", "%Y%m%d") en <- as.Date("20170101", "%Y%m%d") quarters <- seq.Date(from = st, to = en, "quarter") readable <- format(quarters, as.character("%Y-%m")) zeitbereich = c() for(i in 1:(length(readable)-1)) { zeitbereich = c(zeitbereich, readable[i], "", "") } zeitbereich = c(zeitbereich, readable[length(readable)]) 索引中导入了数据,并且您正在searchableAs中进行搜索。这就是你得到这个错误的原因。 您需要删除items覆盖或重新导入数据。

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

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

如果您运行posts_index,它将更新Algolia。如果您执行searchableAs,则需要链接$item->update()方法。 https://laravel.com/docs/5.5/scout#updating-records

答案 1 :(得分:0)

配置模型索引

每个Eloquent模型与给定的搜索“index”同步,该索引包含该模型的所有可搜索记录。换句话说,您可以将每个索引视为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”并尝试