我有一个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中的第一个地图元素!无论我要求什么身份证明。
可怕的部分是,不是抱怨或给出错误但是给出了错误的答案?
答案 0 :(得分:1)
我用7.0-2.3观察同样的情况。您实际看到的是未经过滤的搜索返回整个地理映射文档的片段。由于某种原因,可搜索的表达式只返回测试服务器上的第一个map元素。也许有版本差异?
您观察到的是由未经过滤的&#39;选项。运行过滤,它将正常工作,没有任何额外的索引。从它的外观来看,添加一个属性范围索引并没有帮助,也没有启用位置,尽管我认为应该这样做。也许迈克的建议可以帮助调查那里发生的事情。
帮助是为map元素添加片段根。但我不建议在这么大的文档上使用碎片。将地理映射拆分为单独的地图文档。这样可以更准确地获得准确的估算值。
HTH!
答案 1 :(得分:0)
您可以使用多种工具来确定查询正在执行的操作。在这种情况下,https://docs.marklogic.com/xdmp:plan和https://docs.marklogic.com/xdmp:query-trace会有所帮助。
您也可以尝试https://docs.marklogic.com/xdmp:query-meters,但它通常对性能分析更有用。
此外,https://docs.marklogic.com/xdmp:describe结果通常也很有用。有时,这会揭示在XML或浏览器渲染中不会显示的微妙之处。