英文:
How does Hugo's Related Content algorithm work? What are the factors?
问题
在他们的网站上,他们说:
> Hugo使用一组因素根据Front Matter参数来识别页面的相关内容。这可以根据所需的索引和参数进行调整,或者使用Hugo的默认相关内容配置。
但是算法究竟是如何工作的?有哪些因素?
英文:
On their website they say:
> Hugo uses a set of factors to identify a page’s related content based on Front Matter parameters. This can be tuned to the desired set of indices and parameters or left to Hugo’s default Related Content configuration.
But how exactly does the algorithmus work? What are the factors?
答案1
得分: 1
这个原始方法在gohugoio/hugo
PR 3815中有解释。
> 已经尝试了几次修复#98 -- 但是所有尝试都因为某些原因失败了。
解决这个问题很困难,我认为失败的主要原因是自下而上的方法,也就是我们从最困难的问题开始:解决夏洛克的最后一个案例。
>
> 我现在重新开始处理这个问题的原因是这个 Twitter 线程:
>
> 在页面参数中使用交集和关键词可以工作得相当好,但是它是二次的,对于较大的网站来说速度会很慢,无法使用。
>
> 因此,我开始通过概述一个接口来解决这个 PR:
>
> go >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 中定义一组索引:
> toml >indexes: > - param: keywords > weight: 1 > - param: tags > weight: 3 >
>然后我们从中惰性地构建某种索引,然后你可以进行快速搜索,例如:
>
> go >{{ .Site.RegularPages.Similar . }} >{{ .Site.RegularPages.Search "hugo" }} >{{ .Site.RegularPages.SearchIndex "keywords" "hugo" | limit 10 }} >
初始实现:gohugoio/hugo commit 3b4f17b
英文:
The original approach is explained in gohugoio/hugo
PR 3815
> Several attempts have been started to fix #98 -- all of them have failed for some reason.
It is a hard problem to solve, and I think the main reason for failure has been the bottom-up-approach, i.e. we have started with the hardest problem: Solving Sherlock's last case.
>
> The reason I'm picking up this ball again now is this Twitter thread:
>
> Using intersect and keywords in page params work reasonably well, but it is quadratic and will be slow to unusable for larger sites.
>
> So, instead of solving the hardest problem, I have started on this PR by outlining an interface:
>
> go
>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)
>}
>
>Naming suggestions welcomed.
>
>The idea is that a user defines a set of indexes in config.toml:
> toml
>indexes:
> - param: keywords
> weight: 1
> - param: tags
> weight: 3
>
>Then we lazily build some sort of index from that, and then you can do fast searches like:
>
> go
>{{ .Site.RegularPages.Similar . }}
>{{ .Site.RegularPages.Search "hugo" }}
>{{ .Site.RegularPages.SearchIndex "keywords" "hugo" | limit 10 }}
>
Initial implementation: gohugoio/hugo commit 3b4f17b
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论