我想使它,以便我可以过滤结果的基础上,一个列是不可搜索的梅利搜索和拉拉威尔侦察。
因此,设想一个“Comment”表,其中包含以下可搜索列:
public function toSearchableArray() {
$array = Arr::only(
$this->toArray(),
['id','title', 'link', 'raw_text', 'subchan', 'nsfw']
);
return $array;
}
但只能在特定日期后获得结果:
Comment::search($query, ['filters' => 'created_at > 795484800'])
为此,我需要将created_at
scout添加到SearchableArray中。这样做的问题是,当用户搜索时,来自created_at
的结果也会被查询。
3条答案
按热度按时间efzxgjgh1#
如果我没有理解错的话,您希望能够基于
created_at
列进行过滤,但它不应该是可搜索的,即输入“795”作为查询不应该返回所有结果,其中“795”是时间戳的一部分?我不认为Scout会让你以一种简单的方式实现这一点,但它仍然是可能的。
第一步是将
created_at
列添加到toSearchableArray()
方法中,这样可以确保数据被美丽索引。第二步是修改索引的配置,在索引中你的模型是可搜索的,以便从可搜索属性列表中排除
created_at
。这是伪代码,没有文档记录,但它应该看起来像这样:一旦
created_at
被索引但不可搜索,你就需要过滤这个值。步骤3是使用Scout执行自定义搜索:
同样,这是伪代码-我还没有测试它的任何部分。如果Scout能实现对自定义索引设置的支持,或者公开一种更新设置的方法,例如允许您在配置文件中添加驱动程序特定的设置,我将非常感激。
qni6mghb2#
我用Meilisearch的可过滤属性解决了这个问题。但是在运行搜索之前需要配置它。我用
php artisan tinker
解决了这个问题,如下所示,你可能需要写一个Artisor命令来完成。如果你有一个相当大的数据集,你可能需要运行下面的命令来检查状态:
如果响应包含
isIndexing => false
,就可以开始了。htzpubme3#
我花了无数个小时调试并让日期过滤器工作。
当where子句只接受两个参数时,这将不起作用
这也不会起作用,因为传递的参数不是scout库中支持的两个选项的一部分
我的解决方案,每个人都在那里试图让这个工作是使用以下:
希望这能帮助其他有问题的人,因为这浪费了我早上寻找解决方案的时间,直到我决定在库中挖掘代码。