ML搜索语法

时间:2016-10-21 14:30:50

标签: marklogic marklogic-8

我想知道我想要什么是可能使用搜索语法..例如:让我们假设3个文件

 doc 1:
    <seq>
       <chain><name>PL-1</name></chain>
    </seq>
doc 2:
    <seq>
         <chain><name>PL-1</name></chain>
         <chain><name>PL-2</name></chain>
     </seq>
doc 3:
    <seq>
         <chain><name>PL-1</name></chain>
         <chain><name>PL-2</name></chain>
         <chain><name>PL-3</name></chain>
     </seq>

我想搜索包含链名称“PL-1”的文档。没有别的..所以对于这个搜索条件我只需要获得doc 1,如果我想搜索PL-1和PL-2,我应该只获得doc2

这可以用搜索语法吗?

1 个答案:

答案 0 :(得分:1)

默认搜索语法使用减号(-)作为启动令牌转换为否定查询,因此您可以使用:

xquery version "1.0-ml";

import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";

search:parse("PL-1 -PL-2 -PL-3")

这将返回第一个示例的查询,匹配doc 1:

<cts:and-query xmlns:cts="http://marklogic.com/cts">
  <cts:word-query>
    <cts:text xml:lang="en">PL-1</cts:text>
  </cts:word-query>
  <cts:not-query>
    <cts:word-query>
      <cts:text xml:lang="en">PL-2</cts:text>
    </cts:word-query>
  </cts:not-query>
  <cts:not-query>
    <cts:word-query>
      <cts:text xml:lang="en">PL-3</cts:text>
    </cts:word-query>
  </cts:not-query>
</cts:and-query>

使用相同的方法,您可以为仅与doc 2匹配的查询创建一个字符串:

PL-1 PL-2 -PL-3