已弃用:已弃用此存储库的使用。请使用 Scout Extended - https://github.com/algolia/scout-extended。
使用 Algolia 引擎时扩展 Laravel Scout 功能的有用宏的集合。
该包旨在提供一组宏来利用 Algolia 特定的功能。
使用composer拉取包
composer require algolia/laravel-scout-algolia-macros
接下来,您应该将AlgoliaScoutMacrosServiceProvider
添加到config/app.php
配置文件的providers
数组中:
Algolia ScoutMacros ServiceProvider ::class
count
count 方法将在向 Algolia 发出请求后返回结果数。
重点是避免从数据库中提取数据并构建集合。
$ nbHits = Model :: search ( ' query ' )-> count ();
hydrate
hydrate
方法与标准 get() 方法类似,不同之处在于它会水合 Algolia 索引中的模型。
默认情况下,Scout 将使用 Algolia 结果的 ID 并从本地数据库中提取数据来创建集合。
因此, hydrate
会比get
快得多。
注意:通过使用此方法,您必须确保正确保持算法索引与数据库同步,以避免填充陈旧数据。
默认情况下,此方法会将 Algolia 记录中的所有属性添加到您的模型中。如果您想从模型中删除敏感或不相关的数据,您有两种选择。
您可以在 Algolia 仪表板中设置可检索属性的列表。在这种情况下,Algolia 将仅返回这些属性,同时仍然搜索每个searchableAttributes
。
您也可以使用模型类的 laravel $guarded
属性。例如,如果您不想在集合中看到_h
属性,则将有以下内容。
namespace App ;
use Illuminate Database Eloquent Model ;
use Laravel Scout Searchable ;
class People extends Model
{
use Searchable ;
protected $ guarded = [ ' _highlightResult ' ];
}
with
with
方法使您可以完全访问 Algolia options 参数。这允许您自定义搜索参数,就像直接使用 algolia php 库一样。
$ result = Model :: search ( '' )
-> with ([ ' hitsPerPage ' => 30 ])
-> get ();
$ filters = [
' averge_ratings >= 3 ' ,
' total_reviews >= 1 '
];
$ filterString = implode ( ' AND ' , $ filters );
$ params = [
' aroundLatLng ' => $ lat . ' , ' . $ lon ,
' hitsPerPage ' => 30 ,
' page ' => 0 ,
' aroundRadius ' => 30000 , //30km
' aroundPrecision ' => 200 , //200 Meters
' getRankingInfo ' => true , //return ranking information in results
' filters ' => $ filterString // add filters
];
$ result = Model :: search ( '' )-> with ( $ params )-> get ();
aroundLatLng
aroundLatLng
方法会将地理位置参数添加到搜索请求中。您可以用其坐标定义一个点。
请注意,此方法是纯粹的语法糖,您可以使用with
来指定更多位置详细信息(例如半径)
// Models around Paris latitude and longitude
Model :: search ( ' query ' )-> aroundLatLng ( 48.8588536 , 2.3125377 )-> get ();
还可以添加Where子句
Model :: search ( ' query ' )
-> aroundLatLng ( 48.8588536 , 2.3125377 )
-> where ( ' something_id ' , 1 )
-> get ();
请随意打开一个问题来请求宏。
打开您想要的任何拉取请求,以便我们可以讨论它并改进包。 ?