2017-01-27 2 views
0

Я хочу получить некоторые выделенные элементы из документов, удовлетворяющих запросу cts.Query. Я использую JavaScript на MarkLogic документов, как это -Выберите несколько элементов документа в одном запросе

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

Я хочу, чтобы получить a:id, a:number элементы и field атрибут a:number в одном запросе.

Я попытался с помощью -

cts.valueTuples(
    [ 
     cts.elementReference(fn.QName(a, 'id')), 
     cts.elementAttributeReference(fn.QName(a, 'number'), xs.QName('field')), 
     cts.elementReference(fn.QName(a, 'number'))  
    ], 
    [], 
    cts.andQuery(
     [ 
     <query1>, 
     <query2> 
     ] 
    ) 
) 

Но это дает мне все комбинации результатов для 3 запросов в стоимостном кортежей (что-то вроде декартово произведение).

Как я могу получить желаемый результат?

ответ

1

Если включить соответствующие индексы позиции слова, вы можете попробовать вариант ordered:

включает в себя совместные вхождения только тогда, когда значение первого лексиконе появляется перед значением из второго лексиконе. Требуется, чтобы для обеих лексиконов было включено слово .

Я не думаю, что это предотвратит перекрестные продукты, но это должно по крайней мере привести к меньшему из них.

Хотя нет ничего плохого в выполнении нескольких вызовов cts.values и cts.valueTuples. Вы можете сделать три звонка и запросить комбинации значений uri (используя cts.uriReference()) и использовать uri для корреляции между результатами.

HTH!

Смежные вопросы