iT邦幫忙

2023 iThome 鐵人賽

DAY 14
1

cover image

在我們開始將資料開始匯集的同時,可以先開始著手設定搜尋引擎的設定。
作為收錄內容的產品,一定會要有一個好用的搜尋引擎,可以方便提供給使用者一個快速瀏覽,但又可以貼切喜好的工具。

Make Your Choice!

Algolia
在這邊我們選用了 Algolia 作為這次的搜尋引擎供應商,Algolia 是一家法國的新創公司,他們提供易用的後台與完整的 SDK 周邊工具,在針對應用的內容建立索引十分快速的同時,又有不輸 Google 搜尋那樣有效率的查詢速度。

當然如果在有時間跟人員的情況下,也可以考慮開源的替代方案:

Elasticsearch: https://github.com/elastic/elasticsearch

Meilisearch: https://github.com/meilisearch/meilisearch

Typesense: https://github.com/typesense/typesense

以上的解決方案都有開源自建版本,與雲服務版本可以參考比較,可以依照資料型態去比較一下哪一個方案比較適合。

DIY now

在這邊不免俗的就要使用 Laravel 官方已經有支援的搜尋整合套件 Laravel Scout
相關的整合已經被 Laravel Scout 串了差不多了,所以安裝步驟很簡單:

composer require laravel/scout "algolia/scout-extended:^2.0" algolia/algoliasearch-client-php

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

然後記得要把需要可以搜尋的 model 引入 Searchable

// Episode.php
use Laravel\Scout\Searchable;

class Episode extends Base
{
    use Searchable;
    // ...
}

然後把需要可以搜尋的資料,在上傳建立索引前重新整理一次。

這邊我另外將 channel 的 title 與 slug 另外拉出來,這樣可以方便在 web 在得到搜尋結果時,可以讓使用者可以快速跳至某個 podcast 清單頁。

// Episode.php
public function toSearchableArray(): array
{
    $array = $this->toArray();
    $channel = $this->channel

    $array['channel_title'] = $channel->title;
    $array['channel_slug'] = $channel->slug;

    return Arr::only($array, [
        'id',
        'locale',
        'title',
        'metadata',
        'channel_title',
        'channel_slug',
        'metadata',
    ]);
}

在把需要使用的 model 部分都使用上面的方式都設定過一輪,之後就可以開始建立索引了

php artisan scout:import

下一篇會再來深入 Algolia 部分的進階用法與設定調整。

Referrences


上一篇
#12 Milestone I:架構調整與 Review
下一篇
#14 打造專業的產品領航員:搜尋引擎進階玩法 (2/3)
系列文
Laravel 擴展宇宙:從 1 到 100 十倍速打造產品獨角獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言