2015-06-10 5 views
2

У меня есть следующий XML. Когда я ищу для города, как Бангалор & государства как Telegana он не должен возвращать никакого результата, так как город и государство принадлежат к разным элементам адреса ...Поиск документов с родительско-детским контекстом: Marklogic

XML Document : 
<person> 
    <name>Sundeep</name> 
    <address> 
     <city>Bangalore</city> 
     <state>Karnataka</state> 
    </address> 
    <address> 
     <city>Hyderabad</city> 
     <state>Telangana</state> 
    </address> 
</person> 

Искать: город = Бангалор & состояния = Telangana

Выходной ток: Это возвращает человека документ при использовании ниже запроса

<search:and-query> 
    <search:value-query> 
     <search:element name="city"/> 
     <search:text>Bangalore</search:text> 
    </search:value-query> 
    <search:value-query> 
     <search:element name="state"/> 
     <search:text>Telangana</search:text>    
    </search:value-query> 
</search:and-query> 

Exce pted Output: Поскольку город и государство принадлежат к двум различным элементам адреса , он не должен возвращать вышеуказанный документ в результате. Любые указатели при решении этой проблемы с использованием REST-API или XQuery?

ответ

2

Я на самом деле просто решить эту проблему ранее сегодня с помощью/v1/поиск REST API здесь: Marklogic 8 xml search

Чтобы использовать XQuery для решения это будет прекрасно работать для вас:

xquery version "1.0-ml"; 
import module namespace search = 
    "http://marklogic.com/appservices/search" 
    at "/MarkLogic/appservices/search/search.xqy"; 

let $options := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <constraint name="address"> 
     <element-query name="address" ns="" /> 
    </constraint> 
    <constraint name="city"> 
     <value> 
     <element ns="" name="city"/> 
     </value> 
    </constraint> 
    <constraint name="state"> 
     <value> 
     <element ns="" name="state"/> 
     </value> 
    </constraint> 
    </options> 

return 
    search:search('address:(city:Bangalore AND state:Karnataka)', $options) 
+0

Спасибо большое вы можете помочь мне с эквивалентным запросом на отдых? –

+1

Несколько сносок на предложение Роба. 1). Вам не нужно создавать индексы диапазонов для значений запросов выше по городу и штату. 2). Самый простой способ устранить ложные срабатывания для сдерживания - включить фильтрацию, добавив опцию filter. 3). В REST API вы можете либо установить параметры запроса, либо отправить строковый запрос, либо отправить структурированный запрос, эквивалентный комбинации строкового запроса с параметрами запроса. – ehennum

+0

@ehennum: Спасибо за подсказку по индексам. Я дал отфильтрованный снимок, но ему не удавалось заставить его работать. Мне было бы интересно узнать больше. Хороший вопрос №3, я исправлю свой другой ответ, чтобы включить это. –

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