Hugo 的相關文章演算法
Published:Updated:
網路上找的到 Hugo 用戶怎麼設定相關文章,但是沒看過有人介紹他的相關文章是怎麼找的,於是本文簡介相關文章的核心邏輯,原始碼在 inverted_index.go,本文撰於 Hugo v0.152.2。
TLDR
簡單來說 Hugo 基本上只以 taxonomy(標籤、分類)和 Date(文章日期)作為判斷依據,如果啟用 fragments 功能的話還會把文章內文的標題拿來比較,並且只有完全相同的字串才會計分。
資訊
「基本上」的意思是 Hugo 還考量其他資訊,但是由於要完全相同才會計分,那些資訊又不太可能相同,或是屬於文章建立的同時就確定了無法修改的資訊。Hugo 額外考量的資訊請見 page.go#L264。
演算法
簡易說明原始碼的邏輯。
預處理階段:
- 先取出所有文章的 term(標籤、分類等 taxonomy)
- 每個 term 都標記上有哪些文章
- 移除太常見的關鍵字,因為沒有參考價值,可用
cardinalityThreshold調整閥值
計算階段:
- 取出現在文章的 term,如果啟用
fragments會額外取出文章內容的標題 - 查找剛才預處理的字典,找到有哪些文章也使用這些 term
- 對這些 term 進行加權計分
- 計算結束後總分低於
threshold的文章不會被列入相關文章中
取出所有 term、查找字典、對 term 加權計分這是三重迴圈,不過由於計算很簡單所以就算三重也不會拖累性能。
結論
這個演算法對我這種懶的認真想標籤的人不太有用,因為我的標籤是從預設的標籤裡面刪掉不相關的,因此很容易出現太常見的問題,不過這已經很是平衡效能和效果方式了。