【问题标题】:MarkLogic - Property Range Index on subset of documents in a databaseMarkLogic - 数据库中文档子集的属性范围索引
【发布时间】:2018-12-06 12:05:59
【问题描述】:
MarkLogic 版本 - 9.0-6.2
在我们的 data-hub-FINAL 数据库中,每个实体都有一个名为“TransactionRequestDtTm”的属性,这意味着数据库中的每个文档都有这个属性。
对于一个特定的集合,我需要获取“TransactionRequestDtTm”大于输入时间戳的文档。我正在考虑在 TransactionRequestDtTm 属性上使用范围索引,但根据我的理解,MarkLogic 会在初始化时将所有具有 TransactionRequestDtTm 属性的文档拉入内存。就我而言,这意味着整个数据库将被拉入内存。
如果实际行为不同,请纠正我的理解。有没有办法表明仅在特定集合上才需要范围索引(可能使用不同的属性名称)?请推荐!
【问题讨论】:
标签:
marklogic
marklogic-9
marklogic-dhf
【解决方案1】:
如果没有范围索引,MarkLogic 确实需要提取每个文档来检查时间戳。使用智能代码,它可能会以流的方式完成,所以它不会耗尽你所有的内存,但也不会很快。
范围索引预加载在内存中,但不保存整个文档,只是对它们的引用与每个文档中出现的范围索引值相结合。这是查找匹配文档的最快方法,并且可以防止内存不足,前提是您在搜索后不尝试获取所有匹配文档。
您不能告诉 MarkLogic 仅在文档子集上放置范围索引,但通常不需要。如果您想返回一个相交,只需询问符合这两个条件的结果。 MarkLogic 可以非常快速地从索引中解析匹配。
使用 cts search 来解决这个问题,并确保只获取前 10 个文档。你会看到它会非常快。
HTH!