iT邦幫忙

2023 iThome 鐵人賽

DAY 15
2
SideProject30

Laravel 擴展宇宙:從 1 到 100 十倍速打造產品獨角獸系列 第 15

#14 打造專業的產品領航員:搜尋引擎進階玩法 (2/3)

  • 分享至 

  • xImage
  •  

cover image

延續上篇的介紹,我們已經將 Algolia 結合至我們的 Laravel 專案中,並且成功地建立了基本的搜尋索引。這篇我們將深入探討 Algolia 的一些進階設定。

進階用法

在不同的應用情境下,建立適當的索引是非常重要的。

假設如果你想要製作一個全站搜尋,可以試著使用 Aggregator 去針對多組資料集去整合搜尋的索引與情境。

use Algolia\ScoutExtended\Searchable\Aggregator;

class LatestAggregator extends Aggregator
{
    protected $models = [
         \App\Channel::class,
         \App\Episode::class,
    ];

    public function shouldBeSearchable()
    {
        return $this->model->isPublished();
    }
}

用法也跟一般查詢一樣,用法不變。

$models = App\Search\Latest::search('Iphone 15')->get();

也記得要把被設定的 model 自動更新索引關閉,避免於 model 與 Aggregator 兩邊同時針對索引重複更新

Laravel\Scout\ModelObserver::disableSyncingFor(Channel::class);
Laravel\Scout\ModelObserver::disableSyncingFor(Episode::class);

Algolia 的進階設定

Algolia 提供了許多可以客製化的選項,讓你可以根據需求調整搜尋行為。以下是幾個常見的情境:

1. 排名和排序 (Ranking and Sorting)

Algolia 提供了自訂排序與排名的規則與設定公式。例如,你可以根據日期、熱門程度或其他自定義的欄位資料對搜尋結果進行排序,或者使用內容相關性的參數去排序。

2. 自訂同義詞 (Custom Synonyms)

如果你會希望使用者可以更輕易搜尋到有多種詞彙關聯到同一個情境,或是有別名的情況時,你可以在 Algolia 的 UI 上去調整設定。

目前有四種的方式可以調整,但是大多數情況可以使用 Regular synonyms 去設定就可以滿足基本的需求。

  • Regular synonyms
    • 像是你可以設定 李白, 太白, 青蓮居士, 謫仙人, 詩仙 等等設定為同義詞,這樣之後搜尋會將前面的詞視為同一個,並且搜尋跟前面設定有關係的結果出來,
  • One-way synonyms
    • 類似 Regular synonyms 但是會依照設定的方式會有方向性的特性,就不會如 Regular synonyms 是雙向的同義詞
  • Alternative corrections
    • 可以針對精準搜尋或是同義詞的搜尋結果去調整優先權
  • Placeholders
    • 簡單的例子像是可以設定詞彙的一個變數,可以根據變數的值去給予不同的同義詞設定,例如 Macbook por 13", Macbook pro 15" 跟 Macbook pro 14", Macbook pro 16" 分別對到不同的同義詞,就可以設定 Macbook pro <size>

其實 Algolia 還提供了更多的微調選項,像是我覺得蠻有趣的是 Typo tolerance,可以讓我們提供更接近 Google search 的使用體驗。但當然這些部分很多都要深入的研究跟微調,細節部分在 Algolia 的官方文件都有 step by step 的教學可以研究看看。

Next

下篇文章,我們將進一步探討如何使用 Algolia 的推薦系統來,快速建構出常見的內容推薦機制。你不需要理解複雜的推薦系統的建置與架構,也可以享受到情境簡單的推薦系統。


上一篇
#13 打造專業的產品領航員:搜尋引擎的選用與設定 (1/3)
下一篇
#15 打造專業的產品領航員:推薦系統初嘗試 (3/3)
系列文
Laravel 擴展宇宙:從 1 到 100 十倍速打造產品獨角獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
mikehsu0618
iT邦新手 2 級 ‧ 2023-09-30 16:15:36

有點東西

我要留言

立即登入留言