使用父子上下文搜索文档:Marklogic

时间:2015-06-10 12:26:24

标签: marklogic

我有以下XML。当我在班加罗尔寻找城市时作为Telegana,它不应该返回任何结果,因为城市和州属于不同的地址元素......

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

搜索:city = Bangalore&amp;状态=特兰伽纳

     

当前输出:使用以下查询时返回人员文档

<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>

例外输出:由于城市和州都属于两个不同的 地址元素它不应该在结果中返回上面的文档。任何 使用REST-API或XQuery解决这个问题的指针?

1 个答案:

答案 0 :(得分:2)

我实际上今天早些时候使用/ v1 / search 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)