marklogic - MarkLogic - 数据库中文档子集的属性范围索引
问题描述
MarkLogic 版本 - 9.0-6.2
在我们的 data-hub-FINAL 数据库中,每个实体都有一个名为“TransactionRequestDtTm”的属性,这意味着数据库中的每个文档都有这个属性。
对于一个特定的集合,我需要获取“TransactionRequestDtTm”大于输入时间戳的文档。我正在考虑在 TransactionRequestDtTm 属性上使用范围索引,但根据我的理解,MarkLogic 会在初始化时将所有具有 TransactionRequestDtTm 属性的文档拉入内存。就我而言,这意味着整个数据库将被拉入内存。
如果实际行为不同,请纠正我的理解。有没有办法表明仅在特定集合上才需要范围索引(可能使用不同的属性名称)?请建议!
解决方案
如果没有范围索引,MarkLogic 确实需要提取每个文档来检查时间戳。使用智能代码,它可能会以流的方式完成,所以它不会耗尽你所有的内存,但它也不会很快。
范围索引预加载在内存中,但不保存整个文档,只是对它们的引用与每个文档中出现的范围索引的值相结合。这是查找匹配文档的最快方法,它可以防止内存不足,前提是您在搜索后不尝试获取所有匹配的文档。
您不能告诉 MarkLogic 只在文档的子集上放置范围索引,但您通常不需要这样做。如果您想返回一个相交,只需询问符合这两个条件的那些结果。MarkLogic 可以非常快速地从索引中解析匹配。
使用 cts search 来解决这个问题,并确保只获取前 10 个文档。你会看到它会非常快。
!
推荐阅读
- excel - 插入列和自动填充列标题的宏
- javascript - 如何在 django 模板脚本中传递静态 js 文件?
- javascript - GET 无法处理。连接尚未建立,离线队列已停用
- c++ - C ++ GDI +如何绘制具有边框半径的矩形
- ios - OPEN3D:如何将 CVPixelBuffer 转换为 o3d.geometry.Image
- .net-core - 发布具有大型二进制依赖项的 Azure Functions
- javascript - setState 函数在传递给助手时出现未定义
- layout - cytoscape中如何根据不同的边缘颜色来布局连接?
- laravel - 用逗号从laravel中的多个选择中分隔每个值
- c# - 关于取消使用密码提取文件夹但创建空白文件夹的问题