我在应用程序的许多功能中使用了cts:contains()。当我迁移到ML-7时,cts:contains()的大部分地方都没有像预期的那样工作。在许多情况下,我正在执行第一个参数的xdmp:quote()以获得所需的结果,但我仍然认为这不是一个有效的修复。另外,在其他情况下,我在cts:contains中使用cts:reverse-query,这是不可能的。是否有解决这个问题的方法,或者我需要在所有的cts: contains事件上重新工作?在Marklogic 7中是否有关于API变化的文档?
安装指南:http://docs.marklogic.com/guide/relnotes
cts:的文档包含"在检查匹配之前原子值被转换为文本节点"的注意。所以xdmp:unquote
的结果不太可能是你想要的。您将测试包含序列化XML的文本节点,而不是测试原始XML节点。
以下是文档中cts:contains
和cts:reverse-query
的示例。这在7.0-2.2中对我来说很好,并按预期返回true
。
let $query := <query>{cts:word-query("hello")}</query>
let $x := <bar>hello</bar>
return cts:contains($query, cts:reverse-query($x))
一般来说,cts:contains
在内存中进行计算,并且不能很好地扩展。这对于处理不在数据库中的单个内存文档非常方便。但在大多数情况下,cts:search
或search:search
是更好的选择。
Mike。谢谢你的建议。此问题已作为Marklogic 7.0.2.2版本的一部分解决。