【问题标题】:Perform Range Searches on Document Metadata using java api使用 java api 对文档元数据执行范围搜索
【发布时间】:2017-05-12 05:42:16
【问题描述】:

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

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

【问题讨论】:

  • Java 指南中“结构化查询示例”下的第一个示例是“日期范围结构化查询”,它满足您的需求吗? docs.marklogic.com/8.0/guide/java/searches#id_66534
  • 另见“示例:文档属性结构化查询”docs.marklogic.com/8.0/guide/java/searches#id_74535 和 StructuredQueryBuilder.properties 方法。尽管如此,贾斯汀在下面的评论更有帮助。最好远离物业。
  • 嗨 Sam.. 感谢您的回复,但第一个链接提供了 xml 或数据内容中日期范围的示例,而第二个链接提供了在属性中搜索常量值的示例。我的用例是对文档属性进行范围搜索。内容和属性的范围搜索是否相同?示例我在系统日期上有一个范围索引,并且我正在发出类似... {code} Sqb.properties(Sqb. And(Sqb.range(constraint_name,type,operator,value)) ) {code}跨度>
  • 是的,您以相同的方式对内容和属性执行范围搜索。您只需要设置您正在使用的片段:文档或属性
  • 谢谢 Sam,我现在可以对属性进行范围搜索了

标签: java marklogic marklogic-8


【解决方案1】:

通常建议尽可能避免文档属性。跨文档及其属性进行查询需要连接两个单独的片段,即 MarkLogic 中的存储单元。连接很昂贵,尤其是在规模上。您应该将元数据放入文档本身。如果您需要将其与主要内容分开,您可以创建一个信封包装器。例如,包装代表客户​​实体的文档,

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

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

【讨论】:

    【解决方案2】:

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

    HTH!

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多