我正在尝试通过Contentful API(npm module of the content delivery)进行操作,但不确定是否可行。
我在Contentful中具有内容类型tag
,其中有1个字段,也称为tag
。然后,我有另一个名为article
的内容类型,它具有一个称为tags
的多重引用字段。该字段允许编辑者将多个标签条目链接到文章。
现在,当用户加载文章时,我想通过使用标签来查找具有相同标签的其他文章来显示相似的阅读。
所以文章的相关JSON结构看起来像这样:
{
sys: {...},
fields: {
tags: [
{
sys: {...},
fields: { tag: "Football" }
},
{
sys: {...},
fields: { tag: "Leeds United" }
},
{
sys: {...},
fields: { tag: "Elland Road" }
}
]
}
}
例如,用户正在阅读的文章具有标签football
,Leeds United
和Elland Road
。我将如何使用API返回带有这3个标签或其中一些标签的其他文章。例如,带有所有3个标签的文章将是强匹配,但是只有1个匹配标签的文章将是弱匹配。
我尝试像这样使用包含规则:
contentClient.entries({
"content_type": "xxxxxxxx",
"fields.tags[in]": ["football", "Leeds United"],
}, function(err, entries){
if (err) throw err;
console.log(entries);
});
这当然是行不通的,因为其中值in的字段不是fields.tags[in]
,而是fields.tags.fields.tag
。
您可以通过确定标签的sys.id
并通过将字典更改为以下内容来查询它们来实现包含查询:
{
"content_type": "xxxxxxxx",
"fields.tags.sys.id[in]": "tagId1, tagId2",
}
内容传送模块不会编组数组,因此参数必须是逗号分隔的字符串。 Content Delivery API不支持评分,因此,使用该查询您将仅获得所有条目的列表,这些条目均具有一个或多个这些标签的链接,但不会以强弱匹配的方式进行排序。
client.getEntries({
content_type: '<content_type_id>',
'fields.<field_name>[in]': 'accessories,flowers'
})
根据文档,请注意'附件,花'之间的逗号后没有空格