MarkLogic—数据库中文档子集的属性范围索引

MarkLogic—数据库中文档子集的属性范围索引,marklogic,marklogic-9,marklogic-dhf,Marklogic,Marklogic 9,Marklogic Dhf,MarkLogic版本-9.0-6.2 在我们的DataHub最终数据库中,每个实体都有一个名为“TransactionRequestDtTm”的属性,这意味着数据库中的每个文档都有这个属性 对于一个特定的集合,我需要获取“TransactionRequestDtTm”大于输入时间戳的文档。我正在考虑对TransactionRequestDtTm属性使用范围索引,但根据我的理解,MarkLogic会在初始化时将具有TransactionRequestDtTm属性的所有文档拉入内存。在我的例子中,

MarkLogic版本-9.0-6.2

在我们的DataHub最终数据库中,每个实体都有一个名为“TransactionRequestDtTm”的属性,这意味着数据库中的每个文档都有这个属性

对于一个特定的集合,我需要获取“TransactionRequestDtTm”大于输入时间戳的文档。我正在考虑对TransactionRequestDtTm属性使用范围索引,但根据我的理解,MarkLogic会在初始化时将具有TransactionRequestDtTm属性的所有文档拉入内存。在我的例子中,这意味着整个数据库将被拉入内存


如果实际行为不同,请纠正我的理解。是否有方法表明仅在特定集合上需要范围索引(可以使用不同的属性名称)?请建议

如果没有范围索引,MarkLogic确实需要调出每个文档来检查时间戳。有了智能代码,它可能会以流式方式完成,因此不会耗尽所有内存,但也不会很快

范围索引预先加载到内存中,但不保存整个文档,只包含对它们的引用以及每个文档中出现的范围索引值。这是查找匹配文档的最快方法,如果您在搜索后不尝试获取所有匹配文档,它将防止内存不足

您不能告诉MarkLogic仅在文档的子集上放置范围索引,但通常不需要这样做。如果希望返回一个intersect,只需请求符合这两个条件的结果即可。MarkLogic可以非常快速地从索引中解析匹配项

使用cts搜索来处理这个问题,并确保只获取前10个文档。你会看到它会非常快