rest - Marklogic REST API 搜索最新文档版本

标签 rest marklogic

我们需要使用 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如果可能的话。

最佳答案

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

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

关于rest - Marklogic REST API 搜索最新文档版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029650/

相关文章:

javascript - AngularJS 1.x 如何使用资源获取结果数组?

json - Marklogic 中用于 JSON 文档的日期格式

node.js - Marklogic Node.js API : How to get the document where an embedded triple lives?

curl - 在运行容器时成功使用 curl

MarkLogic XML 到 JSON 的转换

.net - GET 请求的参数数组

REST - 将 ID 放入正文中吗?

json - 找不到使用 Json 的类的序列化程序

java - 用于 REST 服务和数据库的 Thrifty Java EE 设置

xml - 不区分大小写,未过滤的搜索在 MarkLogic 中返回错误结果