已棄用:已棄用此儲存庫的使用。請使用 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 ();
請隨意打開一個問題來請求巨集。
打開您想要的任何拉取請求,以便我們可以討論它並改進套件。 ?