2017-01-17 38 views
0

我有這樣的文件 -從文檔中獲取有限的元素

<a:root xmlns:a = 'some-ns'> 
    <a:id>some-id</a:id> 
    . 
    . 
    <a:number field='field1'>3</a:number> 
    <a:number field='field2'>4</a:number> 
    . 
    . 
</a:root> 

我確實有文件的ID來獲取,我想提取所有符合查詢其中沒有文件的a:ida:number使用XPath。 我可以使用cts.elementValueQuery輕鬆獲取與id匹配的文檔,然後使用XPath獲取元素。像這樣 -

cts.search( 
    cts.andQuery(
    [ 
     cts.collectionQuery('liveCollection'), 
     cts.elementValueQuery(fn.QName(a, 'id'), 'http://iddn.icis.com/series/energy/cegh-day-ahead-index')  
    ] 
) 
).next().value.getElementsByTagNameNS(a, 'number') 

但我希望MarkLogic只返回選定的元素。

任何人都可以請告訴我這樣做的優化方法嗎?

我寫了這個查詢(不給我預期的結果) -

cts.elementValueCoOccurrences(
    fn.QName(c, 'id'), 
    fn.QName(c, 'precision'), 
    ('map'), 
    cts.andQuery(
     [ 
     cts.collectionQuery(liveCollection), 
     cts.elementValueQuery(fn.QName(c, 'id'), seriesIds) 
     ] 
    ) 
) 

我希望得到這樣的輸出 -

| <a:id>id-1</a:id> | <a:number field='field1'>3</a:number> |

| <a:id>id-1</a:id> | <a:number field='field2'>4</a:number> |

| <a:id>id-2</a:id> | <a:number field='field1'>3</a:number> |

+0

你能展示輸出應該如何看,你有什麼嘗試過自己? – grtjn

+0

@grtjn我已經更新了這個問題。你能請現在提出一些建議嗎? –

回答

3

這在某些方面是數據建模挑戰。你不想過濾你的文檔(xPath到它們中),但你只想要返回一部分結果。

即使您嘗試使用他可搜索的表達式來獲得幻想,默認結果是第一個匹配項,所以您仍然需要打開過濾的查詢。

不幸的是,優化的方法是通過範圍索引...但是一旦索引到位,您就可以使用共同發生來提取json結果集中的id和數字,然後進一步處理。