在他们的网站上,他们说:
Hugo根据Front Matter参数使用一组因素来识别页面的相关内容。这可以调整为所需的索引和参数集,也可以保留为Hugo的默认相关内容配置。
源
但是算法究竟是如何工作的呢?有哪些因素?
gohugoio/hugo
PR 3815 中解释了原始方法
已经开始尝试修复#98,但由于某些原因,所有尝试都失败了
这是一个很难解决的问题,我认为失败的主要原因是自下而上的方法,即我们从最难的问题开始:解决夏洛克的最后一个案件。我现在再次拿起这个球的原因是这个推特帖子:
在页面参数中使用intersect和keywords效果相当好,但它是二次型的,对于较大的网站来说会很慢而无法使用。
因此,我没有解决最难的问题,而是通过概述一个界面来开始这个PR:
type PageSearcher interface { Search(args ...interface{}) (Pages, error) SearchIndex(index string, args ...interface{}) (Pages, error) Similar(p *Page) (Pages, error) SimilarIndex(index string, p *Page) (Pages, error) }
欢迎命名建议。
这个想法是用户在config.toml:中定义一组索引
indexes: - param: keywords weight: 1 - param: tags weight: 3
然后我们懒洋洋地从中建立某种索引,然后你可以进行快速搜索,比如:
{{ .Site.RegularPages.Similar . }} {{ .Site.RegularPages.Search "hugo" }} {{ .Site.RegularPages.SearchIndex "keywords" "hugo" | limit 10 }}
初始实现:gohugoio/ugo提交3b4f17b