3

我有基于它所描述的 mime 类型图像的集合中的文档:image/jpg、image/png、image/gif。

我希望能够指定一个$mime-typeas"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"将返回 URIs ("image/jpg", "image/png", "image/gif")。我希望能够在任何这些集合中搜索文档。

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

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

4

3 回答 3

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.

于 2012-06-05T19:19:52.190 回答
1

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

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

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

于 2012-06-05T20:11:55.487 回答
0

在 qconole 上,根据集合名称搜索 -

fn:collection("collection-name");

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

xdmp:document-get-collection("uri of document");
于 2015-06-17T03:06:07.890 回答