xpath - 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</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 关系。我需要在“聚合”函数上获得良好的性能,该函数可以找到共同构成“wijk”对象的所有 ppc6 对象。通常有大约 500.000 个 ppc6 对象和 40.000 个“wijk”对象。

我已在 map 元素上为此文档创建了一个片段根。

map 元素上的元素范围索引。

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"), "*")

未找到索引:字符串元素属性范围索引... 不知道下一步该去哪里?

我找不到那么多关于设置特定范围索引的文档/工作示例......

最佳答案

雨果:

MarkLogic 的一些最佳实践是:

  • 将文档视为关系行的等效项,而不是关系表的等效项。
  • 在可能的情况下进行反规范化,而不是根据请求进行聚合。

根据上面的描述,我想知道是否可以将每个 wijk 对象存储在单独的文档中,并将 wijk 对象的 ppc6 对象存储在 wijk 文档中。

如果这不可行,另一种方法是将每个 wijk 和 ppc6 对象存储在其自己的文档中,在 ppc6 文档中的 wijk 的外键上放置范围索引,并按以下方式聚合

  1. 查询 wijk 对象
  2. 将 wijk 对象放入 map
  3. 将 wijk 对象的主键提取为值序列
  4. 使用主键序列作为 ppc6 文档中外键的范围查询的值列表。

希望有帮助,

埃里克·亨纳姆

关于xpath - Marklogic索引问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22917274/

相关文章:

mysql - MySQL 可以在带 ORDER BY 的 RANGE QUERY 中使用索引吗?

lucene - Elasticsearch会在升级时自动更新Lucene索引吗?

python-2.7 - 我想使用 Python 操作 MarkLogic 中的文件

java - 如何使用 MarkLogic Java API 调用路径范围索引查询?

使用 'like' 时 Mysql 日期时间索引不工作

marklogic - marklogic中的存储元素是什么?

ruby - 经典选择器和 xpath 选择器的区别

python - xpath 中没有条件

java - 返回 JOOX 中的第一级标签

java - 如何使用 Java 从具有多个 namespace 的 XML 中获取特定节点?