MarkLogic - 集合和索引之间的最佳解决方案

时间:2016-02-29 16:28:40

标签: json collections marklogic marklogic-8

我有几个这样的JSON:

[{
    "type": "car",
    "field1": "test"
}, {
    "type": "bike",
    "field1": "test"
}]

我将它们存储在MarkLogic 8.4中,我想对它们执行一些搜索查询以根据类型检索文档(例如:查找类型为&#34的所有文档; car")。

我有两个可能的解决方案:

  • 将Marklogic集合设置为每个文档。例如:put" car"和"自行车"示例文档上的集合。在我的搜索查询中,我可以添加集合限制。
  • 在"上输入索引"每个JSON的字段

在表现和/或最佳实践方面,一种方法是否优于另一种方法?

谢谢, 罗曼。

1 个答案:

答案 0 :(得分:7)

尝试cts.jsonPropertyValueQuery:

cts.search(cts.jsonPropertyValueQuery("type", "car"))

环球指数应该包含您需要的信息。

编辑以扩展我的回答: 您提到的两种解决方案都需要存储其他信在所描述的情况下,通用索引已经拥有您需要的信息,使其成为首选解决方案。如果jsonPropertyValueQuery变得模棱两可,这种方法将不再是我的首选;也就是说,如果每个文档有多个type属性。在这种情况下,查询将与任何type属性匹配。

如果是这种情况,在type属性上放置JSON属性范围索引将无济于事,因为范围索引仍将包含type属性的所有实例。

要处理文档中的多种类型,您有两种选择:

  1. 使用收藏品
  2. 使用路径范围索引
  3. 在这两个中,我喜欢第一个。它非常灵活 - 即使您的数据库中包含具有不同结构的文档,您也可以使用它。通过这种方式,它可能是未来的证明"你的项目。权衡是您的代码需要管理您的文档'插入时的集合。尽管如此,这很简单。

    就性能而言,这些方法中的任何一种都可以很好地处理查询,但是选项二在索引编制过程中还需要做更多的工作。 MarkLogic需要检查文档中是否存在已配置的路径,如果存在,则相应地更新索引。这是一个微小的差异,但有可能加起来。