这是一个新手 MarkLogic 问题。想象一下这样的 xml 结构,浓缩了我的真实业务问题:
<Person id="1">
<Name>Bob</Name>
<City>Oakland</City>
<Phone>2122931022</Phone>
<Phone>3123032902</Phone>
</Person>
请注意,一个文档可以并且将会有多个Phone元素。
我需要从每个具有与任何电话号码列表匹配的电话元素的文档中返回信息。该列表中可能有几十个电话号码。
我试过这个:
let $a := cts:word-query("3738494044")
let $b := cts:word-query("2373839383")
let $c := cts:word-query("3933849383")
let $or := cts:or-query( ($a, $b, $c) )
return cts:search(/Person/Phone, $or)
它会正确执行查询,但它会在 Results 元素内返回一系列Phone元素。我的目标是为每个匹配的文档返回所有Name和City元素以及来自 Person 元素的 id 属性。例子:
<results>
<match id="18" phone="2123339494" name="bob" city="oakland"/>
<match id="22" phone="3940594844" name="mary" city="denver"/>
etc...
</results>
所以我认为我需要某种形式cts:search
,既允许这种布尔功能,又允许我指定每个文档的哪些部分被返回。那时我可以进一步处理结果XPATH
。我需要有效地执行此操作,例如,我认为返回文档 uri 列表然后在循环中查询每个文档的效率不高。谢谢!