相关内容
Hugo 使用一组因素根据前置元数据参数识别页面的相关内容。可以将其调整为所需的一组索引和参数,或者保留为 Hugo 的默认相关内容配置。
列出相关内容
要列出最多 5 个相关页面(它们共享相同的日期或关键字参数),只需在您的模板中包含类似于此的部分即可
Related
方法接受一个参数,该参数可以是 Page
或选项映射。选项映射具有以下选项
- 索引
- (
slice
)要在其中搜索的索引。 - 文档
- (
page
)要查找相关内容的页面。指定选项映射时是必需的。 - 命名切片
- (
slice
)要搜索的关键字,使用keyVals
函数表示为KeyValues
的切片。 - 片段
- (
slice
)用于配置为“片段”类型的索引的特殊关键字列表。这将匹配文档的片段标识符。
使用上述所有选项的虚构示例
{{ $page := . }}
{{ $opts := dict
"indices" (slice "tags" "keywords")
"document" $page
"namedSlices" (slice (keyVals "tags" "hugo" "rocks") (keyVals "date" $page.Date))
"fragments" (slice "heading-1" "heading-2")
}}
在相关内容中索引内容标题
Hugo 可以索引您内容中的标题,并使用它来查找相关内容。您可以通过将类型为 fragments
的索引添加到 related
配置中来启用此功能
hugo.
related:
includeNewer: true
indices:
- applyFilter: true
name: fragmentrefs
type: fragments
weight: 80
threshold: 20
toLower: false
[related]
includeNewer = true
threshold = 20
toLower = false
[[related.indices]]
applyFilter = true
name = 'fragmentrefs'
type = 'fragments'
weight = 80
{
"related": {
"includeNewer": true,
"indices": [
{
"applyFilter": true,
"name": "fragmentrefs",
"type": "fragments",
"weight": 80
}
],
"threshold": 20,
"toLower": false
}
}
name
映射到可选的前置元数据切片属性,该属性可用于从页面级别链接到片段/标题级别。- 如果启用了
applyFilter
,则结果中每个页面上的.HeadingsFiltered
将反映过滤后的标题。如果您想在相关内容列表中显示标题,这将非常有用
{{ $related := .Site.RegularPages.Related . | first 5 }}
{{ with $related }}
<h2>See Also</h2>
<ul>
{{ range $i, $p := . }}
<li>
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ with .HeadingsFiltered }}
<ul>
{{ range . }}
{{ $link := printf "%s#%s" $p.RelPermalink .ID | safeURL }}
<li>
<a href="{{ $link }}">{{ .Title }}</a>
</li>
{{ end }}
</ul>
{{ end }}
</li>
{{ end }}
</ul>
{{ end }}
配置相关内容
Hugo 提供了相关内容的合理默认配置,但您可以根据需要在全局或语言级别在配置中微调此配置。
默认配置
如果项目上未设置任何 related
配置,Hugo 的相关内容方法将使用以下配置。
hugo.
related:
includeNewer: false
indices:
- applyFilter: false
cardinalityThreshold: 0
name: keywords
pattern: ""
toLower: false
type: basic
weight: 100
- applyFilter: false
cardinalityThreshold: 0
name: date
pattern: ""
toLower: false
type: basic
weight: 10
- applyFilter: false
cardinalityThreshold: 0
name: tags
pattern: ""
toLower: false
type: basic
weight: 80
threshold: 80
toLower: false
[related]
includeNewer = false
threshold = 80
toLower = false
[[related.indices]]
applyFilter = false
cardinalityThreshold = 0
name = 'keywords'
pattern = ''
toLower = false
type = 'basic'
weight = 100
[[related.indices]]
applyFilter = false
cardinalityThreshold = 0
name = 'date'
pattern = ''
toLower = false
type = 'basic'
weight = 10
[[related.indices]]
applyFilter = false
cardinalityThreshold = 0
name = 'tags'
pattern = ''
toLower = false
type = 'basic'
weight = 80
{
"related": {
"includeNewer": false,
"indices": [
{
"applyFilter": false,
"cardinalityThreshold": 0,
"name": "keywords",
"pattern": "",
"toLower": false,
"type": "basic",
"weight": 100
},
{
"applyFilter": false,
"cardinalityThreshold": 0,
"name": "date",
"pattern": "",
"toLower": false,
"type": "basic",
"weight": 10
},
{
"applyFilter": false,
"cardinalityThreshold": 0,
"name": "tags",
"pattern": "",
"toLower": false,
"type": "basic",
"weight": 80
}
],
"threshold": 80,
"toLower": false
}
}
应使用相同的语法设置自定义配置。
顶级配置选项
- 阈值
- (
int
)一个介于 0-100 之间的值。较低的值将提供更多匹配项,但可能不是那么相关。 - includeNewer
- (
bool
)设置为true
以在相关内容列表中包含比当前页面更新的页面。这意味着随着新的相关内容的添加,旧帖子的输出可能会更改。 - toLower
- (
bool
)设置为true
以将索引和查询中的关键字都转换为小写。这可能会以轻微的性能损失为代价提供更准确的结果。请注意,这也可以按索引设置。
每个索引的配置选项
- 名称
- (
string
)索引名称。此值直接映射到页面参数。Hugo 支持字符串值(示例中的author
)和列表(tags
、keywords
等)以及时间和日期对象。 - 类型
- (
string
)basic
(默认)或fragments
中的一个。 - applyFilter
- (
string
)将type
特定过滤器应用于搜索结果。当前仅用于fragments
类型。 - 权重
- (
int
)一个整数权重,指示此参数相对于其他参数的重要程度。它可以是0
,这会关闭此索引,甚至可以是负数。使用不同的值进行测试,以查看最适合您的内容的值。 - cardinalityThreshold
- (
int
)如果在 1 到 100 之间,则这是一个百分比。删除所有在超过此百分比的文档中使用的关键字。例如,将其设置为60
将删除所有在索引中超过 60% 的文档中使用的关键字。如果为0
,则不会从索引中删除任何关键字。默认值为0
。 - 模式
- (
string
)当前仅与日期相关。在列出相关内容时,我们可能还希望列出时间相近的内容。将“2006”(日期索引的默认值)设置为日期索引的模式将增加在同一年发布的页面的权重。对于较忙的博客,“200601”(年和月)可能是更好的默认值。 - toLower
- (
bool
)见上文。