我有一些问题让我的索引正确。 我试图查询具有很多“地图”属性的(大80Mb)文档,如
<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>
问题1实际上是:我需要拆分这个文件吗?它的大小为80MB,我需要增加内存列表大小。我在某处读到,在内存中有大量文档通常不是一个好主意。该文档在两种类型的对象“ppc6”对象和“wijk”对象之间保持n:m关系。我需要在我的'聚合'函数上获得良好的性能,找到所有ppc6对象,它们共同构成一个'wijk'对象。通常,大约有500,000个ppc6对象和40.000个“wijk”对象。
我在地图元素上为此文档制作了一个fragement root。
地图元素上的元素范围索引。
ppc6_id和wijk_id的属性范围索引,如
scalartype is string
parent namespace uri : "http://www.nvsp.nl/oplage-mapping"
parent local name : map
namespace uri equal to parent namespace (can this ever be *not* the same???)
localname : wijk_id,ppc6_id (not sure how to add more then one here?)
我的查询如下:
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"), "*")
索引未找到:字符串元素属性范围索引... 不知道下一步去哪儿了?
我找不到关于设置特定范围索引的那么多文档/工作示例......
答案 0 :(得分:3)
雨果:
MarkLogic的一些最佳做法是:
从上面的描述中,我想知道是否可以将每个wijk对象存储在单独的文档中,并在wijk文档中存储wijk对象的ppc6对象。
如果这不可行,另一种方法是将每个wijk和ppc6对象存储在自己的文档中,在ppc6文档中为wijk的外键放置范围索引,并通过
进行聚合希望有帮助,
Erik Hennum答案 1 :(得分:0)
你应该拆分80 MB文件吗?应该是。如上所述,MarkLogic希望文档像行一样行动,而不是表格。另一种设计是创建一个map:map
项并将其存储为文档,但这是一种不寻常的方法,我不确定它是否真的合适。例如,每个查询加载地图会有明显的额外延迟。
您的范围索引有什么问题?命名空间。您的属性位于空命名空间中,而不是父元素命名空间。默认元素名称空间声明(xmlns="..."
)不适用于属性。
同样,当您调用cts:element-attribute-values
时,您需要为父QName提供正确的命名空间。并删除'*'参数:那是cts:element-attribute-value-match
,它将通配符与词典进行匹配。如果您想要所有值,则使用空序列调用cts:element-attribute-value
会更有效。
最后,查看http://docs.marklogic.com/cts:value-co-occurrences及其map
选项。这可能正是你所需要的。