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

时间:2018-12-06 12:05:59

标签: marklogic marklogic-9 marklogic-dhf

MarkLogic版本-9.0-6.2

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

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

如果实际行为不同,请更正我的理解。有没有一种方法可以指示仅在特定集合上才需要范围索引(可以使用其他属性名称)?请提出建议!

1 个答案:

答案 0 :(得分:1)

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

范围索引已预加载到内存中,但不包含整个文档,仅包含对它们的引用以及每个文档中出现的范围索引的值。这是查找匹配文档的最快方法,并且可以防止您用尽内存,前提是您不尝试在搜索后获取所有匹配文档。

您不能告诉MarkLogic仅在一部分文档上放置范围索引,但通常不需要这样做。如果您希望交集相交,只需询问那些符合两个条件的结果即可。 MarkLogic可以非常快速地解决索引中的匹配项。

使用cts搜索进行操作,并确保仅获取前10个文档。您会看到它很快。

HTH!