1
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>
    <collection>'/mycollection'</collection>
  </constraint>
</options>
let $options-1  :=
<options xmlns="http://marklogic.com/appservices/search">
  <constraint name="collection">
    <collection prefix="/mycollection"/>
  </constraint>
</options>
return
  search:search('Text',$options)

我尝试了这两个选项,但都没有将搜索限制在特定的集合/mycollection中。

4

1 回答 1

0

您已经定义了一个名为的约束collection并将该约束的前缀配置为/mycollection,但是您尚未将该约束应用于您的搜索。

约束不会自动应用于您的搜索,它们只是定义可以应用的搜索词和选项。

如果您查看Collection Constraint Example,他们会注意到:

如果在集合约束的定义中包含前缀属性,则集合名称源自与约束值连接的前缀。

因此,为了让您应用限制集合的约束,/mycollection我会这样做:

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="collection">
    <collection />
  </constraint>
</options>

return
  search:search("collection:/mycollection " ||'Text', $options)

如果所有集合都以斜杠开头,则可以将其设置为前缀,然后只应用不带斜杠的集合的“名称”:

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="collection">
    <collection prefix="/"/>
  </constraint>
</options>
return
  search:search("collection:mycollection "||'Text', $options)
于 2021-06-15T14:58:51.713 回答