【问题标题】:Marklogic REST API search for latest document versionMarklogic REST API 搜索最新文档版本
【发布时间】:2014-01-28 13:27:03
【问题描述】:

我们需要使用 Marklogic 的 REST api 将 MarkLogic 搜索限制为托管文档的最新版本。我们正在使用 MarkLogic 6。

使用直接 xquery,您可以使用 dls:documents-query() 作为附加查询选项(请参阅 Is there any way to restrict marklogic search on specific version of the document)。

但是 REST api 需要 XML,而不是任意的 xquery。您可以轻松地将普通的 cts 查询转换为 XML(在 QConsole 中执行 <some-element>{cts:word-query("hello world")}</some-element>)。

如果我用dls:documents-query() 试试,我会得到:

<cts:properties-query xmlns:cts="http://marklogic.com/cts">
    <cts:registered-query>
        <cts:id>17524193535823153377</cts:id>
    </cts:registered-query>
</cts:properties-query>

除了不完全透明之外……这个数字有多安全?我们需要把它放在我们的查询选项中,所以它不是我们每次需要时都可以重新生成的东西。我在这里查看了两个不同的安装,并且数字相同,但可以保证相同,并且会改变吗?例如,MarkLogic 升级?

另外,假设号码是安全的,注册查询会一直存在吗?文档说注册查询可能会在不同时间被系统清除,但它是在谈论用户定义的注册查询,我不确定其中有多少适用于内部查询。

这甚至是正确的方法吗?如果我们做不到这一点,我们总是可以设置集合并限制搜索,但如果可能的话,我们宁愿使用dls:documents-query

【问题讨论】:

    标签: rest marklogic


    【解决方案1】:

    该数字是已注册的查询 ID,具有确定性。也就是说,每次注册查询时都是一样的。这种行为在几个主要版本中是不变的,但不能保证。如您所知,服务器可以随时取消注册查询。如果发生这种情况,任何使用该 id 的查询都会抛出 XDMP-UNREGISTERED 错误。因此,最好在需要时重新生成查询,或许可以再次调用dls:documents-query。在与后续搜索相同的请求中这样做是最安全的。

    所以我建议使用您自己的搜索端点版本来扩展 REST API。您的新端点可以将dls:documents-query 添加到输入查询中。这样,注册查询将在与后续搜索相同的请求中生成。对于 ML6,http://docs.marklogic.com/6.0/guide/rest-dev/extensions 解释了如何执行此操作。

    【讨论】:

      【解决方案2】:

      dls:documents-query() 的调用确保查询已实际注册(必要时动态注册),但这在 REST api 中不起作用。您可以按照 Mike 的建议使用自定义扩展来扩展 REST api,但您也可以使用以下内容:

      cts:properties-query(
        cts:and-not-query(
          cts:element-value-query(
            xs:QName("dls:latest"),
            "true",
            (),
            0
          ),
          cts:element-query(
            xs:QName("dls:version-id"),
            cts:and-query(())
          )
        )
      )
      

      这是dls:documents-query()注册的查询。但可能不是未来的证明,因此请在每次升级时检查。您可以在/Modules/MarkLogic/dls.xqy中找到该函数的定义

      HTH!

      【讨论】:

      • 啊,那行得通。如果我们不需要,我们宁愿不复制现有的端点,此时。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多