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

MarkLogic - Best solution between collection and index

我有几个这样的 JSON :

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

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

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

就性能而言,一种方法是否优于另一种方法and/or 最佳实践?

谢谢, 罗曼.

尝试 cts.jsonPropertyValueQuery:

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

通用索引应该有您需要的信息。

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

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

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

  1. 使用集合
  2. 使用路径范围索引

两者中,我喜欢第一个。它很灵活——即使您的数据库中有不同结构的文档,您也可以使用它。这样,它可能 "future proof" 你的项目。权衡是您的代码需要在执行插入时管理文档的集合。不过这很简单。

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