Marklogic xquery在不同的服务器上提供不同的结果

时间:2014-08-08 11:01:40

标签: xquery marklogic

我有一个XML文件,一个查询和两个服务器。

我使用mlcp ad put属性范围索引将xml文件加载到我认为需要的地方。

我们的dev服务器按预期运行,但TEST服务器仅返回文档中的第一个map元素。检查所有数据库设置,重新加载文档,重新索引两个服务器没有结果...

该文件如下:

<geo version="0.3" xmlns="http://www.nvsp.nl/geo-mapping">
  <meta-data>
    <!--Generated by DIKW for NetwerkVSP STTip-->
    <dateCreated>2014-06-27 15:17:17.643318</dateCreated>
  </meta-data>
  <map ppc4_id="3902" wijk_id="390213">
    <bruto>196</bruto>
    <stickers>19</stickers>
    <netto>177</netto>
    <aktief>J</aktief>
  </map>
  <map ppc4_id="3902" wijk_id="3902B01">
    <bruto>36</bruto>
    <stickers>3</stickers>
    <netto>33</netto>
    <aktief>J</aktief>
  </map>
  <map ppc4_id="3902" wijk_id="3902K01">
    <bruto>245</bruto>
    <stickers>44</stickers>
    <netto>201</netto>
    <aktief>J</aktief>
  </map>
  <map ppc4_id="3903" wijk_id="390301">
    <bruto>256</bruto>
    <stickers>37</stickers>
    <netto>219</netto>
    <aktief>J</aktief>
  </map>

后面还有另外35000个地图元素。

XQuery打算查找具有某些ppc4_id或wijk_id属性的地图,如下所示:

xquery version "1.0-ml";
declare namespace gm = "http://www.nvsp.nl/geo-mapping";

let $p4_id := "6626"
let $wijk_id := "662601"
let $uri := '/data/map/geo-mapping.xml'

(: setup query:)
let $q2 := cts:element-attribute-value-query(xs:QName("gm:map"), xs:QName("ppc4_id"), $p4_id)
let $q3 := cts:element-attribute-value-query(xs:QName("gm:map"), xs:QName("wijk_id"), $wijk_id)

(: return map with wijk_id from geo:)
let $maps := cts:search(//gm:map,$q2,("unfiltered"))

return $maps

现在DEV服务器找到了合适的结果,如:

<map ppc4_id="6626" wijk_id="662601" xmlns="http://www.nvsp.nl/geo-mapping">
<bruto>220</bruto>
<stickers>11</stickers>
<netto>209</netto>
<aktief>J</aktief>
</map>
element 
<map ppc4_id="6626" wijk_id="662602" xmlns="http://www.nvsp.nl/geo-mapping">
<bruto>198</bruto>
<stickers>13</stickers>
<netto>185</netto>
<aktief>J</aktief>
</map>
... more map elements ...

但TEST服务器只返回doc中的第一个地图元素!无论我要求什么身份证明。

可怕的部分是,不是抱怨或给出错误但是给出了错误的答案?

2 个答案:

答案 0 :(得分:1)

我用7.0-2.3观察同样的情况。您实际看到的是未经过滤的搜索返回整个地理映射文档的片段。由于某种原因,可搜索的表达式只返回测试服务器上的第一个map元素。也许有版本差异?

您观察到的是由未经过滤的&#39;选项。运行过滤,它将正常工作,没有任何额外的索引。从它的外观来看,添加一个属性范围索引并没有帮助,也没有启用位置,尽管我认为应该这样做。也许迈克的建议可以帮助调查那里发生的事情。

帮助是为map元素添加片段根。但我不建议在这么大的文档上使用碎片。将地理映射拆分为单独的地图文档。这样可以更准确地获得准确的估算值。

HTH!

答案 1 :(得分:0)

您可以使用多种工具来确定查询正在执行的操作。在这种情况下,https://docs.marklogic.com/xdmp:planhttps://docs.marklogic.com/xdmp:query-trace会有所帮助。

您也可以尝试https://docs.marklogic.com/xdmp:query-meters,但它通常对性能分析更有用。

此外,https://docs.marklogic.com/xdmp:describe结果通常也很有用。有时,这会揭示在XML或浏览器渲染中不会显示的微妙之处。