cts:contains()在marklogic 7中没有按预期工作

时间:2014-03-28 07:04:13

标签: marklogic

我在我的应用程序中使用cts:contains()的功能很多。当我迁移到ML-7大多数地方cts:contains()没有按预期工作。在许多情况下,我正在使用xdmp:quote()获取所需结果的第一个参数,但我仍然认为这不是一个有效的修复。另外在我使用cts的其他情况下:cts:contains中的反向查询,这是不可能的。有没有解决这个问题的工作,或者我需要在所有cts上重做:包含出现?还有Marklogic 7中此类API更改的文档吗?

2 个答案:

答案 0 :(得分:1)

以前版本的更改位于“安装指南”中:http://docs.marklogic.com/guide/relnotes

cts:contains的文档注意"原子值在检查匹配之前转换为文本节点"。因此xdmp:unquote的结果不太可能达到您想要的效果。您可以测试包含序列化XML的文本节点,而不是测试原始XML节点。

以下是来自docscts:containscts: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:searchsearch:search是更好的选择。

答案 1 :(得分:0)

麦克。感谢您的输入。此问题已作为Marklogic 7.0.2.2版的一部分得到解决。早期的7.0.2.1版本存在这个问题。