我们需要使用 Marklogic 的 REST API 将 MarkLogic 搜索限制为托管文档的最新版本。我们正在使用 MarkLogic 6。
使用直接 xquery,您可以使用dls:documents-query()
作为附加查询选项(参见有没有办法限制 marklogic 搜索文档的特定版本 https://stackoverflow.com/questions/15386070/is-there-any-way-to-restrict-marklogic-search-on-specific-version-of-the-documen/15393871#15393871).
但 REST api 需要 XML,而不是任意 xquery。您可以轻松地将普通 cts 查询转换为 XML(执行<some-element>{cts:word-query("hello world")}</some-element>
在 QConsole 中)。
如果我尝试这样做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 http://docs.marklogic.com/6.0/guide/rest-dev/extensions解释了如何执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)