如何在一个或多个集合中执行MarkLogic搜索文档

时间:2012-06-05 16:00:13

标签: search collections xquery marklogic

我根据它描述的mime类型图像在集合中有文档:image / jpg,image / png,image / gif。

我希望能够将$mime-type指定为"image""image/jpg",以便我可以搜索所有图片类型或特定子类型的文档。

let $mime-type-pattern := fn:concat($mime-type, "*")
let $mime-type-collection-uris := cts:collection-match($mime-type-pattern)

搜索$mime-type "image"将返回URI ("image/jpg", "image/png", "image/gif")。我希望能够在任何这些集合中搜索文档。

搜索$mime-type "image/jpg"将返回URI ("image/jpg")。然后我只会搜索“image / jpg”集合的文档。

使用Search API进行搜索需要创建search:options的结构是什么?

3 个答案:

答案 0 :(得分:2)

您可以在嵌套在cts:collection-query节点内的<additional-query>选项中使用<options>

search:search("foo",
  <options xmlns="http://marklogic.com/appservices/search">
    <additional-query>
      {cts:collection-query($mime-type-collection-uris)}
    </additional-query>
  </options>)

这会将搜索限制在$mime-type-collection-uris中的集合。

答案 1 :(得分:1)

Evan的回答看起来不错。 Joe可能已经考虑过这个问题,但我想提一下以这种方式使用集合的潜在设计问题。

集合只是一个扁平的字符串。因此,虽然单独的mime类型很好,但您可能会在稍后添加的其他集合中命名冲突。您可以通过为集合名称提供一些类似命名空间的结构来添加一些保护,例如mime-type=image/jpg。在某些情况下,这也可以加速收集匹配。

在大多数情况下,我建议使用元素而不是集合,只是为了避免这个陷阱。但是对于图像,这个元素必须进入属性片段,如果没有其他属性可以存储,这可能会花费更多。

答案 2 :(得分:0)

超过qconole,根据集合名称进行搜索 -

fn:collection("collection-name");

获取分配给URI的集合名称 -

xdmp:document-get-collection("uri of document");