【问题标题】:Marklogic xquery gives different result on different serversMarklogic xquery 在不同的服务器上给出不同的结果
【发布时间】:2014-08-08 11:01:40
【问题描述】:

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

我使用 mlcp 将 xml 文件加载到两者中,并在我认为需要它们的位置放置属性范围索引。

我们的开发服务器按我的预期运行,但测试服务器只返回文档中的第一个地图元素。检查所有数据库设置,重新加载文档,重新索引两台服务器没有结果...

文档如下所示:

<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 ...

但是测试服务器只返回文档中的第一个地图元素!不管我要什么身份。

可怕的是不抱怨或不给出错误,而是给出错误的答案?

【问题讨论】:

  • 好吧,我不确定我们能否在这里为您提供帮助。如果确实一切都与您所说的相同,那么您当然应该得到相同的结果(即它是 ML 中的错误)。如果根本不是所有东西都相同,那么从您的描述中就很难分辨出来。
  • tx dirkk 用于响应,问题仍然是它如何成为 cts:search 在搜索属性 id 时返回文档中的第一个元素...?
  • stackoverflow.com/help/how-to-ask - 我认为这归结为“我在两个应该相同的不同集群上运行相同的查询,但我看到不同的结果。有没有任何工具可以告诉我为什么结果不同?”我会根据这种效果进行编辑,但这将是一个非常激进的改变。

标签: xquery marklogic


【解决方案1】:

我在 7.0-2.3 中观察到相同的情况。您实际上看到的是未经过滤的搜索返回整个地理映射文档的片段。并且由于某种原因,可搜索表达式仅返回测试服务器上其中的第一个地图元素。可能是版本不同?

您观察到的情况是由“未过滤”选项引起的。运行过滤,它会在没有任何额外索引的情况下正常工作。从外观上看,添加属性范围索引没有帮助,也没有启用位置,尽管我认为应该这样做。也许迈克的建议可以帮助调查那里发生的事情。

有什么帮助是为地图元素添加一个片段根。但我不建议在这么大的文档上使用碎片。将地理映射拆分为单独的地图文档。这使得获得准确的估计值变得更加容易..

HTH!

【讨论】:

  • 是的,两个系统之间的区别可能是片段根或片段父配置。索引条目指向片段,因此可以解释不同的查询结果。
  • ok grtjn 'filtered' 选项解决了我的问题,谢谢。同样在 TST 服务器上,我没有片段根设置。所以阅读docs.marklogic.com/cts:search 上的文档,我现在可以看到这个结果是如何结束的......未经过滤它会返回“候选”结果。
【解决方案2】:

您可以使用多种工具来确定查询在做什么。在这种情况下,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 或浏览器呈现中未显示的细微之处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多