在 MLCP 中作为 -query_filter 传递时,值运算符“<”(小于)符号无效

Posted

技术标签:

【中文标题】在 MLCP 中作为 -query_filter 传递时,值运算符“<”(小于)符号无效【英文标题】:Invalid Value Operator '<'(less than)sign when passed as -query_filter in MLCP 【发布时间】:2016-11-08 04:53:28 【问题描述】:

我正在使用 MLCP(Marklogic 内容泵)将内容从一个数据库复制到另一个数据库。在这个我使用 -query_filter 选项,它的值是一个 cts:query 以 XML 序列化格式的一组 cts:element-range-query 包装在 cts:and-query :

<cts:and-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-range-query operator=">">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
  <cts:element-range-query operator="&lt;">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
</cts:and-query>

现在,上面的查询在 ML Qconsole 上执行时返回有效结果,但是当传入 MLCP 的 -query_filter 选项时,它会给出错误提示 'Invalid attribute value character ' 。

Marklogic和MLCP的版本是8.0-5。

在进一步深入研究时,我发现问题仅在于运算符值小于'

注意:我在数据库中为元素“released-on”配置了一个有效的范围索引

【问题讨论】:

【参考方案1】:

MarkLogic 鼓励在使用序列化为 XML 的 cts 查询时使用选项文件,因为底层操作系统可以在命令行上解释特殊字符。 p>

我的第一个猜测是尝试创建一个文件,例如,options.txt,内容如下:

--query_filter
<cts:and-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-range-query operator=">">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
  <cts:element-range-query operator="&lt;">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
</cts:and-query>

(您可能必须使所有 XML 都适合该文件的同一行)

然后用

调用MLCP

mlcp.sh -options_file options.txt ...

【讨论】:

这正是我目前正在做的事情。所有相关选项都包含在 options.txt 文件中,我正在执行上述相同的命令。 我明白了。这听起来确实很奇怪,因为 XML 的格式是正确的。如果某处有错误并且“<”,我会想到一些东西在管道中过早解决“ 我尝试使用 '&lt;'也有同样的错误 老数据库的版本会不会低于4.0? MarkLogic 文档它曾经错误地允许在属性中使用“

以上是关于在 MLCP 中作为 -query_filter 传递时,值运算符“<”(小于)符号无效的主要内容,如果未能解决你的问题,请参考以下文章

在应用服务中发送域实体作为参数或发送实体 id 作为参数

我可以将 UIImage 作为文本放在 textview 中,以便我可以在 ios 中将它们作为文本删除

为啥我可以在 Qt 5.5.1 中使用 QSerialPort* 作为临时变量而不是作为类的成员?

CMFCColorDialog 在 MFC 属性页中作为 Release 不工作,作为 Debug 工作正常

在 swift 中使用协议作为数组类型和函数参数

如何在 azure API 中发送文本作为输入并接收情绪或情绪作为响应?