【问题标题】:How to perform a MarkLogic search for documents in one or more collections如何对一个或多个集合中的文档执行 MarkLogic 搜索
【发布时间】:2012-06-05 16:00:13
【问题描述】:

我在集合中的文档基于它所描述的 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:options 的结构以使用搜索 API 进行搜索?

【问题讨论】:

  • 您能否轻松地标记您的所有图像/jpg(或图像/foo)以及图像集中?或许这会让这件事变得更容易。
  • 我可以分别用类型和子类型标记它们,并可能在其他地方简化。谢谢。

标签: search collections xquery marklogic


【解决方案1】:

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

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 中的集合。

【讨论】:

  • 谢谢埃文。像魅力一样工作。就一个问题。如果我的 mime-type 没有产生任何集合,则 $mime-type-collection-uris 是一个空集。似乎 cts:collection-query 如果传递了一个空集,则默认搜索任何/所有集合。我理解正确吗?
  • 好问题。根据我的测试,不,我认为它只会匹配与任何指定集合 URI 关联的文档。如果您不传递任何集合 URI(空序列),那么它将不匹配任何文档。你看到不同的行为吗?您可以使用cts:search(collection(), cts:collection-query(())) 对此进行测试,它返回一个空序列。但我会去检查以确保 Search API 没有做不同的事情......
  • 是的,搜索 API 的行为始终如一(不返回任何结果)。您可以通过在上述解决方案中将$mime-type-collection-uris 替换为() 来进行测试。
【解决方案2】:

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

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

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

【讨论】:

  • 迈克,谢谢你的建议。我将审查设计,看看重构是否有意义。非常感谢您的帮助。
【解决方案3】:

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

fn:collection("collection-name");

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多