Marklogic cts:element-query/cts:not-query 的问题

我们尝试在Marklogic上去实现一个搜索逻辑。逻辑中包含了cts:element-query 和 cts:not-query (即例子中变量$isPulledBack)。但用这个逻辑搜索出来的结果跟我们的预期有很大的出入。在下面的例子当中,我们的条件是搜索出文不同时包含vendorId="ABC"且IsPulledBack=“Y”的File元素的文档。给出的测试数据12345.xml完全符合这个条件,却没有被返回。再调用cts:contains去检查12345.xml是否符合$isPulledBack这个query的时候,返回了true。同样的query,cts:contains返回true,cts:search却没有返回结果。这个本身就是矛盾的。然后尝试将cts:not-query去掉,之用cts:element-query,同时调整测试数据。然后用这样的query去search,每次的返回都很正常,而且cts:search与cts:contains的结果也都符合,不再矛盾。综上,我们就怀疑cts:element-query 和 cts:not-query同时使用时可能存在某种bug。我们用的Marklogic版本是“6.0-4.1”。已经将这个问题report给了Marklogic的support,建了相应的ticket,希望官方能给出解释并解决这个问题。

(:
To reproduce this issue:
#1 Data preparation: please create test data in DB 
:)
xdmp:document-insert("/test/12345.xml",
      <Sample id="12345" xml:lang="en">
          <Files>
            <File fileType="PDF" vendorId="ABC">
                              <FileName>mde792355.pdf</FileName>
                              <RixmlResourceId/>
                              <ExpireDateTime>2029-04-28T15:47:52.000Z</ExpireDateTime>
                              <ExpireDimensionDate>210710</ExpireDimensionDate>
                              <ExpireDimensionTime>142472</ExpireDimensionTime>
                              <IsPulledBack>N</IsPulledBack>
                              <IsTransmitted>Y</IsTransmitted>
                              <DistTime>2014-05-02T11:49:59.000Z</DistTime>
                              <DefaultRendition>Y</DefaultRendition>
            </File>
            <File fileType="PDF" vendorId="EFG">
                              <FileName>mde792355.pdf</FileName>
                              <RixmlResourceId/>
                              <ExpireDateTime>2029-04-28T15:47:52.000Z</ExpireDateTime>
                              <ExpireDimensionDate>210710</ExpireDimensionDate>
                              <ExpireDimensionTime>142472</ExpireDimensionTime>
                              <IsPulledBack>N</IsPulledBack>
                              <IsTransmitted>Y</IsTransmitted>
                              <DistTime>2029-04-28T15:47:52.000Z</DistTime>
                              <DefaultRendition>Y</DefaultRendition>    
            </File>
            <File fileType="R-PDF" vendorId="HIJ">
                              <FileName>QO3I.pdf</FileName>
                              <RixmlResourceId/>
                              <ExpireDateTime>2029-04-28T15:47:52.000Z</ExpireDateTime>
                              <ExpireDimensionDate>210710</ExpireDimensionDate>
                              <ExpireDimensionTime>142472</ExpireDimensionTime>
                              <IsPulledBack>N</IsPulledBack>
                              <IsTransmitted>Y</IsTransmitted>
                              <DistTime>2029-04-28T15:47:52.000Z</DistTime>
                              <DefaultRendition>Y</DefaultRendition>
            </File>
            <File fileType="PDF" vendorId="LMN">
                              <FileName>QO3H.pdf</FileName>
                              <RixmlResourceId/>
                              <ExpireDateTime>2029-04-28T15:47:52.000Z</ExpireDateTime>
                              <ExpireDimensionDate>210710</ExpireDimensionDate>
                              <ExpireDimensionTime>142472</ExpireDimensionTime>
                              <IsPulledBack>N</IsPulledBack>
                              <IsTransmitted>Y</IsTransmitted>
                              <DistTime>2029-04-28T15:47:52.000Z</DistTime>
                              <DefaultRendition>Y</DefaultRendition>
            </File>
          </Files>
      </Sample>
)

(:
#2 run the below code against the test data:
:)
let $isPulledBack := cts:not-query(
                                         cts:element-query(xs:QName("Files"), 
                                            cts:element-query(xs:QName("File"),
                                              cts:and-query( (
                                                cts:element-attribute-value-query(xs:QName("File"), xs:QName("vendorId"), "ABC"),
                                                cts:element-value-query(xs:QName("IsPulledBack"), "Y")
                                              ) )
                                            )
                                          )
                                        )
                                        
return cts:search(/Sample, $isPulledBack) (:It returns no results, but we don’t have vendorId equals to “ABC” and IsPulledBack equals “Y”:)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值