Как ограничить API поиска для конкретного поиска по коллекции в Marklogic?

#xquery #marklogic-10

Вопрос:

 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 .

Ответ №1:

Вы определили вызываемое ограничение collection и настроили префикс для этого ограничения /mycollection , однако вы не применили это ограничение к своему поиску.

Ограничения не применяются автоматически к вашим поисковым запросам, они просто определяют, какие условия и параметры поиска могут быть применены.

Если вы посмотрите на пример ограничения коллекции, они заметят:

Если вы включаете атрибут префикса в определение ограничения коллекции, то имя коллекции получается из префикса, связанного со значением ограничения.

Итак, для того, чтобы вы применили ограничение, которое ограничивает коллекцию /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)
 

Комментарии:

1. Что это значит? Не возвращает никаких документов, возвращает документы, соответствующие вашему поисковому запросу, но не ограниченные коллекцией, или что?

2. Не ограничиваясь этой коллекцией.