MarkLogic - 集合和索引之间的最佳解决方案
MarkLogic - Best solution between collection and index
我有几个这样的 JSON :
[{
"type": "car",
"field1": "test"
}, {
"type": "bike",
"field1": "test"
}]
我将它们存储在 MarkLogic 8.4 中,我想对它们执行一些搜索查询以根据类型检索文档(例如:查找类型为 "car" 的所有文档)。
我有两个可能的解决方案:
- 为每个文档设置 Marklogic 集合。示例:将 "car" 和 "bike" 集合放在示例文档中。在我的搜索查询中,我可以添加一个集合限制。
- 在每个 JSON
的 "type" 字段上建立索引
就性能而言,一种方法是否优于另一种方法and/or 最佳实践?
谢谢,
罗曼.
尝试 cts.jsonPropertyValueQuery:
cts.search(cts.jsonPropertyValueQuery("type", "car"))
通用索引应该有您需要的信息。
编辑以扩展我的回答:
您提到的两种解决方案都需要存储附加信息。在所描述的案例中,Universal Index 已经拥有您需要的信息,使其成为首选解决方案。如果 jsonPropertyValueQuery 变得不明确,这种方法将不再是我的首选;也就是说,如果每个文档有多个 type
属性。在这种情况下,查询将匹配任何 type
属性。
如果是这种情况,在 type
属性 上放置 JSON 属性 范围索引将无济于事,因为范围索引仍将包含所有type
属性 的实例。
要处理文档中的多种类型,您有两种选择:
- 使用集合
- 使用路径范围索引
两者中,我喜欢第一个。它很灵活——即使您的数据库中有不同结构的文档,您也可以使用它。这样,它可能 "future proof" 你的项目。权衡是您的代码需要在执行插入时管理文档的集合。不过这很简单。
就性能而言,这两种方法中的任何一种都可以很好地处理查询,但选项二在索引期间需要做的工作稍微多一些。 MarkLogic 将需要检查文档中是否存在配置的路径,如果存在,则相应地更新索引。这是一个微小的差异,但有可能加起来。
我有几个这样的 JSON :
[{
"type": "car",
"field1": "test"
}, {
"type": "bike",
"field1": "test"
}]
我将它们存储在 MarkLogic 8.4 中,我想对它们执行一些搜索查询以根据类型检索文档(例如:查找类型为 "car" 的所有文档)。
我有两个可能的解决方案:
- 为每个文档设置 Marklogic 集合。示例:将 "car" 和 "bike" 集合放在示例文档中。在我的搜索查询中,我可以添加一个集合限制。
- 在每个 JSON 的 "type" 字段上建立索引
就性能而言,一种方法是否优于另一种方法and/or 最佳实践?
谢谢, 罗曼.
尝试 cts.jsonPropertyValueQuery:
cts.search(cts.jsonPropertyValueQuery("type", "car"))
通用索引应该有您需要的信息。
编辑以扩展我的回答:
您提到的两种解决方案都需要存储附加信息。在所描述的案例中,Universal Index 已经拥有您需要的信息,使其成为首选解决方案。如果 jsonPropertyValueQuery 变得不明确,这种方法将不再是我的首选;也就是说,如果每个文档有多个 type
属性。在这种情况下,查询将匹配任何 type
属性。
如果是这种情况,在 type
属性 上放置 JSON 属性 范围索引将无济于事,因为范围索引仍将包含所有type
属性 的实例。
要处理文档中的多种类型,您有两种选择:
- 使用集合
- 使用路径范围索引
两者中,我喜欢第一个。它很灵活——即使您的数据库中有不同结构的文档,您也可以使用它。这样,它可能 "future proof" 你的项目。权衡是您的代码需要在执行插入时管理文档的集合。不过这很简单。
就性能而言,这两种方法中的任何一种都可以很好地处理查询,但选项二在索引期间需要做的工作稍微多一些。 MarkLogic 将需要检查文档中是否存在配置的路径,如果存在,则相应地更新索引。这是一个微小的差异,但有可能加起来。