首页 > 解决方案 > MarkLogic - 数据库中文档子集的属性范围索引

问题描述

MarkLogic 版本 - 9.0-6.2

在我们的 data-hub-FINAL 数据库中,每个实体都有一个名为“TransactionRequestDtTm”的属性,这意味着数据库中的每个文档都有这个属性。

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

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

标签: marklogicmarklogic-9marklogic-dhf

解决方案


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

范围索引预加载在内存中,但不保存整个文档,只是对它们的引用与每个文档中出现的范围索引的值相结合。这是查找匹配文档的最快方法,它可以防止内存不足,前提是您在搜索后不尝试获取所有匹配的文档。

您不能告诉 MarkLogic 只在文档的子集上放置范围索引,但您通常不需要这样做。如果您想返回一个相交,只需询问符合这两个条件的那些结果。MarkLogic 可以非常快速地从索引中解析匹配。

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


推荐阅读