对于 Laravel/Scout 全文搜索包的终极困惑?

使用默认的方法是没问题的(如下):

public function toSearchableArray()
    {
        #_ Read Data
        $Arr_Posts = $this -> toArray();
        #_ Back to Scout
        return $Arr_Posts;
    }

但是我想加条件的话

public function toSearchableArray()
    {
        #_ Read Data
        $Arr_Posts = $this -> select(['title','content']) -> get() ->toArray();
        #_ Back to Scout
        return $Arr_Posts;
    }

就会出现如下提示:

Record at the position 6 objectID=10 is too big size=24300 bytes. Contact us if you need an extended quota
阅读 3.5k
1 个回答

再次自问自答一波,反复看了 文档 以及
Github 上的一些 issue 得出的结论:

  • 首先看文档
默认情况下,「索引」会从模型的 toArray 方法中读取数据来做持久化。如果要自定义同步到搜索索引的数据,可以覆盖模型上的 toSearchableArray 方法:
...
public function toSearchableArray()
{
    $array = $this->toArray();

    // Customize array...

    return $array;
}
...
  • 看来我之前的理解是错误的,文档的意思是你必须用基于 toArray() 方法返回的数据才行,所以如果你需要筛选要索引的数据的话,你必须围绕它来作文章,例如你只想要索引文章的标题和内容的话:
...
public function toSearchableArray()
{
    #_ Read Data & Filter Field
    $Arr_Posts = array_only($this -> toArray(), ['title', 'content']);
    #_ Back to Scout
    return $Arr_Posts;
}
...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏