首页 > 解决方案 > 扩展的树缓存在 marklogic 上已满

问题描述

我在我的 MarkLogic 应用程序的查询控制台上运行以下查询,我正在检索与过滤器查询匹配的那些文档的 id。我在执行时面临扩展树缓存已满。
我的查询:

let $a: = cts:search(doc(),
  cts:element-query(xs:QName("doc__doc_type"), cts:and-query(()))
)
for $doc in $a
return ($doc//base__unique_id/text())

如何微调此查询?

与此查询匹配的文档数为 1336967。配置的树大小为 2048MB。

我需要帮助来微调这个查询,以便它在页面中返回值。

标签: xquerymarklogic

解决方案


您有几个选项可用于调整此查询。

  • 最佳选择:假设base__unique_id实际上是一个唯一 ID,您可以在其上放置一个范围索引,并使用cts:element-values. 这将是一个更快的查询,并且也将使用更少的内存,因为您不会打开返回的每个文档。
  • 对结果进行分页。不要一次返回所有结果。在多个查询过程中执行此操作。如果您只是生成所有结果的列表,您还可以查看CORB2以帮助您以可扩展的方式执行此操作。
  • 如果这样做有意义,您可能需要考虑根据文档类型为数据分配命名空间。这将产生更小的术语列表(提高性能)并且可以简化您的许多查询表达式。
  • 如果您没有遵循我的第一个建议,您可以尝试使用绝对 XPath 表达式而不是您现在拥有的相对表达式。
  • 如果你没有遵循我的第一个建议,你可以让你的cts:search未过滤。这将有助于提高结果的速度,但可能无法修复扩展的树缓存错误。

推荐阅读