我有几个这样的JSON:
[{
"type": "car",
"field1": "test"
}, {
"type": "bike",
"field1": "test"
}]
我将它们存储在MarkLogic 8.4中,我想对它们执行一些搜索查询以根据类型检索文档(例如:查找类型为&#34的所有文档; car")。
我有两个可能的解决方案:
在表现和/或最佳实践方面,一种方法是否优于另一种方法?
谢谢, 罗曼。
答案 0 :(得分:7)
尝试cts.jsonPropertyValueQuery:
cts.search(cts.jsonPropertyValueQuery("type", "car"))
环球指数应该包含您需要的信息。
编辑以扩展我的回答:
您提到的两种解决方案都需要存储其他信在所描述的情况下,通用索引已经拥有您需要的信息,使其成为首选解决方案。如果jsonPropertyValueQuery变得模棱两可,这种方法将不再是我的首选;也就是说,如果每个文档有多个type
属性。在这种情况下,查询将与任何type
属性匹配。
如果是这种情况,在type
属性上放置JSON属性范围索引将无济于事,因为范围索引仍将包含type
属性的所有实例。
要处理文档中的多种类型,您有两种选择:
在这两个中,我喜欢第一个。它非常灵活 - 即使您的数据库中包含具有不同结构的文档,您也可以使用它。通过这种方式,它可能是未来的证明"你的项目。权衡是您的代码需要管理您的文档'插入时的集合。尽管如此,这很简单。
就性能而言,这些方法中的任何一种都可以很好地处理查询,但是选项二在索引编制过程中还需要做更多的工作。 MarkLogic需要检查文档中是否存在已配置的路径,如果存在,则相应地更新索引。这是一个微小的差异,但有可能加起来。