【问题标题】: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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多