MarkLogic - 在 URI 为 "name.xml" 且没有目录或斜杠的每个摄取文档上制作 CPF 运行

MarkLogic - Make CPF run on every ingested document where the URIs are "name.xml" with no directories or slashes

我们需要为我们摄取的每个文档添加一个集合,并且希望使用 CPF,因为该集合将取决于文档中的数据。

我们的文档 URI 是:GUID.xml 前面没有正斜杠或目录。

我们已尝试使用以下方法触发 CPF:

文档范围=目录

uri = /

文档范围=文档

uri = /

我们的理论是 CPF 期望文档 URI 以正斜杠开头,但由于它们不是,因此 CPF 不会触发。

我们考虑过使用一种粗略的解决方案,即向每个文档添加一个基本集合并将其用作 CPF 的文档范围,但显然这是添加了我们不需要的不必要数据。

我们将不胜感激任何想法或解决方案。

我在 Domain Scope section of the CPF Guide 中找到了这个:

In the Admin Interface, the document scope drop-down list specifies whether the domain applies to a single document, a directory, or a collection. Each domain can only have one of these document scopes; if you need more than one of these document scopes, you can create multiple domains.

换句话说,要在多个文档上使用 CPF,您需要使用目录或集合来稍微组织您的数据。

另请注意,CPF 指南上写着“Do not overlap domains”。这意味着,如果您希望 CPF 更精确地定位内容,您无论如何都需要更具体的内容组织(例如,不同类型或内容来源的不同目录)。这在搜索过程中也很有帮助。在对您的数据一无所知的情况下,我无法建议您如何分解它,但某种组织通常会有所帮助。

您需要在数据加载中做一些不同的事情。我认为您的阻力最小的途径是将 / 添加到您的 URI 的开头。

我支持 Dave 的 post 作为合适的答案。但是,为了完整起见,我深入探讨了 CPF 和触发器协同工作的方式,以及您如何使用可用工具完成您想要的工作。但是即使你 'can' accmoplish 它,斜杠也会更整洁。

我同意 Dave 关于“/”的建议。以斜杠开头在 ML 中是一件好事(当然不是必需的)。但是,我 运行 处理了一些假设开头有斜线的事情。

但是,这需要改变您拥有的东西 - MarkLogic 有很多隐藏的好东西,所以我们可以四处翻找一下,看看我们可以尝试哪些其他技巧。

什么是公积金? 它是一个建立在触发器之上的应用程序,可以做一些非常方便的事情,并且对于管道是高度可配置的。 - 重要的是,在引擎盖下,它 运行 在触发器上。 - 并且触发器需要一个范围(无通配符或空范围)。

现在 MarkLogic 非常清楚 'directory' 以斜线结尾。这适用于根目录。因此,无法根据您的 URIS 在您的示例中使用目录范围或文档范围。

但是我们还有 trgr:collection-scope() 可以玩。如何? 嗯,这很简单: - 对于用于插入文档的任何用户,添加一个默认集合(在管理面板下)->安全->用户[或角色] - 然后定义触发器。

对我来说,我添加了一个名为 'default' 的默认集合和以下触发器定义:

trgr:create-trigger("myTrigger2", "Simple trigger example", 
  trgr:trigger-data-event(
  trgr:collection-scope("default"),
  trgr:document-content("create"),
      trgr:post-commit()),
  trgr:trigger-module(0, "/dae/", "log.xqy"),
  fn:true(), xdmp:default-permissions() )

因此,现在可以触发文档,因为插入它们的用户已经定义了一个集合(在触发 运行s 时已经可用)。是的,这是 CPF 的业务端 - 收集范围与 CPF 配置中的相同。

本质上,文档的范围由用于插入它们的用户限定到一个集合(默认集合)。这样,您就可以说触发器的范围也仅限于该用户的插入。在 MarkLogic 中,你总是有一个用户——即使它是默认用户。

路径是这样的:文档->插入默认集合->触发触发器,因为为默认集合定义了集合范围。