【问题标题】:how to create query with MarkLogic java API that gets json documents that don't have a specific jsonKey?如何使用 MarkLogic java API 创建查询,获取没有特定 jsonKey 的 json 文档?
【发布时间】:2014-07-22 14:33:37
【问题描述】:

我是 Marklogic 的新手,需要在(4 天)内对 Marklogic 进行快速评估。 我想知道如何使用 java API 执行查询,以获取所有没有特定 jsonKey 的 json 文档?

我现在被查询 api 弄得眼花缭乱,不知道该用什么。 非常感谢任何帮助!

问候

扬·范·德·克洛克

【问题讨论】:

  • MarkLogic 是一个非常大的平台,可以在四天内进行评估。你可能最终会感到困惑而不是知情。
  • 是的,已经是这样了:-(

标签: marklogic


【解决方案1】:

所以您正在尝试使用 https://docs.marklogic.com/guide/java/searches#id_56295 描述的 JSON 键值查询?这些似乎只是积极的查询,相当于cts:element-value-query 术语。

对于更复杂的查询,您可能会使用结构化查询选项,在同一指南的下一部分中进行了描述。您可以使用search:not-querysearch:value-constraint-query 元素在XML 中构造它。或者使用http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.NotQuery.html之类的接口在Java代码中构造它。

另一个选项是使用带有定义约束选项的简单字符串查询,例如cat -mytag:dog。但这意味着将mytag 定义为具有cts:not-querycts:element-value-query 的自定义约束。我相信您必须在 XQuery 中编写它。从长远来看,在 MarkLogic 中您可以在不使用 XQuery 的情况下做很多事情。

【讨论】:

  • NotQuery 不是选项,因为该特定 json 键如果存在则可以具有任何值。所以我无法提出可以在 NotQuery 中使用的肯定查询。这让我想到了我现在面临的另一个问题:如何以相对简单的方式使用运算符测试 jsonValue?我浏览了整个 API 文档,但可以点头找到类似的内容:b.value(b.jsonKey("id"), Operator.GT, "123")。在我看来,只允许进行相等比较,对吗?
  • 我不排除NotQuery。如果这是一个 cts:query,你会想要 cts:not-query(cts:element-query(xs:QName('fubar'), cts:and-query(()))) 这样的东西。这看起来很复杂,但它是测试给定元素是否缺失的最有效方法。这绝对是结构化查询,而不是键值查找。还将构造一个不等式查询,一个range-query 和一个range-operator。您可能会从docs.marklogic.com/guide/search-dev/cts_query 了解底层的 cts:query API
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多