使用java api对文档元数据执行范围搜索

时间:2017-05-12 05:42:17

标签: java marklogic marklogic-8

我将xml和json文档存储在数据库中。我的用例是我需要获取其文档创建日期可以说的所有文档> (T-2),T为当前日期。 因此,我在文档元数据中添加了文档创建日期和一些其他文档属性。我可以插入和检索文档所需的所有属性。但是我们可以在元数据属性上执行日期范围搜索吗?

我正在使用StructuredQueryBuilder并且它具有属性方法,我在其中输入属性名称以获取其值,但不知道如何将其转换为范围搜索。

2 个答案:

答案 0 :(得分:2)

通常建议您尽可能避免文档属性。查询文档及其属性需要在两个单独的片段(MarkLogic中的存储单元)之间进行连接。连接很昂贵,特别是在规模上。您应该将元数据放在文档中。如果您需要将其与主要内容隔离,则可以创建信封包装。例如,包装表示Customer实体的文档

{
  "metadata": {
    "createDate": …,
    "author": …, 
    "hash": …,
    …
  },
  "contents": {
    "customer": {
      …
    }
  }
}

以上是JSON,但您也可以使用相同的XML技术。

答案 1 :(得分:1)

作为替代方案,您可以选择使用隐藏的元数据字段,这是MarkLogic 9中的新功能。您创建的元数据字段仅指定属性的名称,然后创建类型字段范围索引。您可以将它们用作任何其他字段,但这些元数据字段的值不会显示为文档的一部分,即使它们内部绑定到文档片段以获得最佳性能。您可以使用xdmp:document-set-metadata之类的命令来设置值,还可以通过MarkLogic REST API的/v1/documents端点执行此操作。

HTH!