数组的内容 API 查询

Contentful API query for array

我正在尝试通过 Contentful API (npm module of the content delivery) 做一些事情,我不确定是否可行。

我在 Contentful 中有一个内容类型 tag,它有 1 个字段,也称为 tag。然后我有另一个内容类型 article,它有一个名为 tags 的多重引用字段。此字段允许编辑者 link 为文章添加多个标签条目。

现在当用户加载文章时,我想通过使用标签来查找具有相同标签的其他文章来显示相似的阅读。

因此文章的相关 JSON 结构如下所示:

{
  sys: {...},
  fields: {
    tags: [
      {
        sys: {...},
        fields: { tag: "Football" }
      },
      {
        sys: {...},
        fields: { tag: "Leeds United" }
      },
      {
        sys: {...},
        fields: { tag: "Elland Road" }
      }
    ]
  }
}

假设用户正在阅读的文章具有标签 footballLeeds UnitedElland Road。我将如何使用 API 到 return 其他带有这 3 个标签或其中一些标签的文章。例如,具有所有 3 个标签的文章将是强匹配,但只有 1 个匹配标签的文章将是弱匹配。

我试过像这样使用包含规则:

contentClient.entries({
  "content_type": "xxxxxxxx",
  "fields.tags[in]": ["football", "Leeds United"],
}, function(err, entries){
  if (err) throw err;
  console.log(entries);
});

这当然是行不通的,因为具有值的字段不是 fields.tags[in],而是 fields.tags.fields.tag

您可以通过确定标签的 sys.id 然后对它们进行查询来实现包含查询,方法是将字典更改为:

{
  "content_type": "xxxxxxxx",
  "fields.tags.sys.id[in]": "tagId1, tagId2",
}

内容传送模块不编组数组,因此参数必须是逗号分隔的字符串。 Content Delivery API 不支持评分,因此使用该查询您只会得到一个列表,其中包含对这些标签中的一个或多个具有 link 的所有条目,但不会按以下方式排序strong/weak 以任何方式匹配。

client.getEntries({
  content_type: '<content_type_id>',
  'fields.<field_name>[in]': 'accessories,flowers'
})

根据文档,注意'accessories,flowers'

之间逗号后没有space