algolia/laravel-scout-algolia-macros

一组宏,用于扩展Laravel Scout以获得更多Algolia功能

0.6.0 2018-09-04 12:53 UTC

This package is auto-updated.

Last update: 2024-09-22 21:49:22 UTC


README

已弃用:请使用Scout Extended - https://github.com/algolia/scout-extended

Laravel Scout Algolia 宏

一组有用的宏,用于扩展在使用Algolia 引擎时 Laravel Scout 的功能。

此包旨在提供一组宏,以充分利用 Algolia 特定功能。

安装

使用 composer 拉取此包

composer require algolia/laravel-scout-algolia-macros

接下来,您应该在 config/app.php 配置文件的 providers 数组中添加 Algolia\ScoutMacros\ServiceProvider

Algolia\ScoutMacros\ServiceProvider::class

用法

计数

计数方法将在请求 Algolia 后返回结果数量。

目的是避免从数据库拉取数据并构建集合。

$nbHits = Model::search('query')->count();

填充

hydrate 方法与标准的 get() 方法类似,但它从 Algolia 索引中填充模型。

默认情况下,Scout 将使用 Algolia 结果的 ID 并从本地数据库中拉取数据以创建集合。

因此,hydrate 将比 get 快得多。

注意:使用此方法时,您必须确保正确同步您的 algolia 索引与数据库,以避免填充过时数据。

限制属性

默认情况下,此方法将添加 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 方法为您提供对 Algolia 选项参数的完全访问权限。这允许您像直接使用 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();

贡献

请随意提交问题以请求宏。

提交任何您想要的拉取请求,这样我们就可以讨论它并改进此包。🎉