2016-04-18 3 views
2

Я хочу понять, имеет ли возможность возможность сравнивать метки элемента в одном документе при выполнении поиска, т. Е. Cts: search.Можно ли сравнивать значения элементов документа при поиске в marklogic

Для например:

Рассмотрим документ, как показано ниже

<root> 
    <someTags></someTags> 
    . 
    . 
    . 
    <effectivePeriod> 
     <dateTimeBegin>2009-01-16T00:00:00-05:00 
     </dateTimeBegin> 
     <dateTimeEnd>2009-01-16T00:00:00-05:00 
     </dateTimeEnd> 
    </effectivePeriod> 
    . 
    . 
    . 
    <otherTags></otherTags> 
</root> 

Давайте представим, что есть сто тысяч документов, как выше. Как я могу выполнить поиск, который гарантирует, что я возьму только документы, где эффективныйPeriod.dateTimeEnd> effectivePeriod.dateTimeBegin?

+0

Ваша структура документ выглядит съедена по умолчанию HTML форматирования. Можете ли вы отредактировать, чтобы отразить фактическую структуру? –

ответ

0

Вы посмотрели cts.periodCompareQuery?

+0

Привет, Сэм, я посмотрю на это. Есть ли у вас указатели на ML 7? – user3129550

+0

Сто тысяч документов действительно не так много. В ML 7 вы можете легко написать какой-нибудь код XQuery или JavaScript для обработки документов, соответствующих поиску cts, и далее фильтровать их с помощью ваших критериев effectivePeriod.dateTimeEnd> effectivePeriod.dateTimeBegin. Существуют и другие методы, которые вы могли бы использовать, если вам нужно масштабировать запрос до миллионов или миллиардов документов. –

1

Построить ваш cts:search() с таким конкретными критериями, как это возможно, а затем отфильтровать результаты с предикатом:

cts:search(collection(), 
      cts:and-query())[root/effectivePeriod[dateTimeEnd gt dateTimeBegin]] 
Смежные вопросы