Xpath Marklogic索引故障
我在获取正确的索引时遇到了一些问题。 我试图查询一个(大80Mb)文档,它有很多“map”属性,比如Xpath Marklogic索引故障,xpath,indexing,marklogic,Xpath,Indexing,Marklogic,我在获取正确的索引时遇到了一些问题。 我试图查询一个(大80Mb)文档,它有很多“map”属性,比如 <oplage version="0.2" xmlns="http://www.nvsp.nl/oplage-mapping"> <meta-data> <!--Generated by DIKW for NetwerkVSP STTip--> <dateCreated>2014-04-03 13:23:16.885124</dateCrea
<oplage version="0.2" xmlns="http://www.nvsp.nl/oplage-mapping">
<meta-data>
<!--Generated by DIKW for NetwerkVSP STTip-->
<dateCreated>2014-04-03 13:23:16.885124</dateCreated>
</meta-data>
<map ppc6_id="1001WE" wijk_id="">
<bruto>0</bruto>
<stickers>0</stickers>
<netto>0</netto>
</map>
我的问题是:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare namespace op = "http://www.nvsp.nl/oplage-mapping";
let $d := '/data/map/oplage-mapping.xml'
let $ids := fn:doc($d)//op:map/@wijk_id
let $u := fn:distinct-values($ids)
let $id2 := cts:element-attribute-values(xs:QName("map"),
xs:QName("wijk_id"),
"*")
return (fn:count($ids),fn:count($u))
我们首先使用xpath路径,但这无法执行,我们需要cts电源。。。所以我们需要索引
查询给我一个错误,如:
XDMP-ELEMATTRRIDXNOTFOUND: cts:element-attribute-values(fn:QName("", "map"), fn:QName("", "wijk_id"), "*") -- No string element-attribute range index for fn:QName("", "map") fn:QName("", "wijk_id") http://marklogic.com/collation/
on line 8
expr: cts:element-attribute-values(fn:QName("", "map"), fn:QName("", "wijk_id"), "*")
找不到索引:字符串元素属性范围索引用于。。。
不知道下一步该去哪里
我找不到那么多关于设置特定范围索引的文档/工作示例…Hugo:
MarkLogic的一些最佳实践包括:
- 将文档视为关系行的等价物,而不是关系表的等价物
- 在可能的情况下进行非规范化,而不是根据请求进行聚合
埃里克·亨纳姆(Erik Hennum)是否应该拆分80-MB的文档?是的,可能。如前所述,MarkLogic希望文档的行为类似于行,而不是表。另一种设计是创建一个
map:map
项并将其存储为文档,但这是一种不同寻常的方法,我不确定它是否真的合适。例如,在加载映射的每个查询中都会有显著的额外延迟
你的范围指数有什么问题?名称空间。属性位于空命名空间中,而不是父元素命名空间中。默认元素命名空间声明(xmlns=“…”
)不适用于属性
另外,在调用cts:element属性值时,需要为父QName提供正确的名称空间。并删除“*”参数:该参数用于cts:element-attribute-value-match
,它根据词典匹配通配符。如果需要所有值,则使用空序列调用cts:element属性值
更有效
最后,查看及其map
选项。这可能正是你所需要的。嗨,埃里克,谢谢你的想法,这正是我试图解决的问题。但这不是我主要问题的答案。在这种情况下,hugoQuotes烧死了我……事实上,我的问题是名称空间问题。我在控制台的定义中添加了引号。在您的回答中,属性没有名称空间也是正确的,因此我们可以将其留空。我不需要地图上的元素范围索引。片段根也不喜欢引号。元素/父元素确实需要一个名称空间,所以我现在的查询是cts:element属性值(xs:QName(“op:map”)、xs:QName(“wijk_id”)、“”),非常快速。
XDMP-ELEMATTRRIDXNOTFOUND: cts:element-attribute-values(fn:QName("", "map"), fn:QName("", "wijk_id"), "*") -- No string element-attribute range index for fn:QName("", "map") fn:QName("", "wijk_id") http://marklogic.com/collation/
on line 8
expr: cts:element-attribute-values(fn:QName("", "map"), fn:QName("", "wijk_id"), "*")