Skip to main content

ZSL

Hugo 的相關文章演算法

Published:
Updated:

網路上找的到 Hugo 用戶怎麼設定相關文章,但是沒看過有人介紹他的相關文章是怎麼找的,於是本文簡介相關文章的核心邏輯,原始碼在 inverted_index.go,本文撰於 Hugo v0.152.2。

TLDR

簡單來說 Hugo 基本上只以 taxonomy(標籤、分類)和 Date(文章日期)作為判斷依據,如果啟用 fragments 功能的話還會把文章內文的標題拿來比較,並且只有完全相同的字串才會計分

資訊

「基本上」的意思是 Hugo 還考量其他資訊,但是由於要完全相同才會計分,那些資訊又不太可能相同,或是屬於文章建立的同時就確定了無法修改的資訊。Hugo 額外考量的資訊請見 page.go#L264

演算法

簡易說明原始碼的邏輯。

預處理階段:

  1. 先取出所有文章的 term(標籤、分類等 taxonomy)
  2. 每個 term 都標記上有哪些文章
  3. 移除太常見的關鍵字,因為沒有參考價值,可用 cardinalityThreshold 調整閥值

計算階段:

  1. 取出現在文章的 term,如果啟用 fragments 會額外取出文章內容的標題
  2. 查找剛才預處理的字典,找到有哪些文章也使用這些 term
  3. 對這些 term 進行加權計分
  4. 計算結束後總分低於 threshold 的文章不會被列入相關文章中

取出所有 term、查找字典、對 term 加權計分這是三重迴圈,不過由於計算很簡單所以就算三重也不會拖累性能。

結論

這個演算法對我這種懶的認真想標籤的人不太有用,因為我的標籤是從預設的標籤裡面刪掉不相關的,因此很容易出現太常見的問題,不過這已經很是平衡效能和效果方式了。