用于在 JSON 文档中搜索特定路径的 MarkLogic Java API

如何解决用于在 JSON 文档中搜索特定路径的 MarkLogic Java API

我正在使用 MarkLogic Java API 来搜索存储在 MarkLogic 9 集合中的 JSON 文档。我的 JSON 结构如下

{
  "time": "2021-02-09T11:09:53","payload": {
    "a": "v1","b": "v2","c": [
      {
        "d": {
          "a": "v1","b": "v2"
        }
      }
    ]
  }
}

我正在尝试搜索 /payload/a=v1 和 /payload/b=v2搜索也返回所有那些 /payload/c/d/a= 的文档v1 和 /payload/c/d/b=v2

这是我的 Java 代码

StructuredQueryBuilder sqb = queryManager.newStructuredQueryBuilder();

List<StructuredQueryDeFinition> list = new ArrayList<>();

list.add(sqb.collection("collectionName"));

StructuredQueryDeFinition a = sqb.value(sqb.jsonProperty("a"),"v1");
StructuredQueryDeFinition b = sqb.value(sqb.jsonProperty("b"),"v2");

list.add(sqb.and(sqb.containerQuery(sqb.jsonProperty("payload"),sqb.and(a,b)))));

StructuredQueryDeFinition deFinition = sqb.and(list.toArray(new StructuredQueryDeFinition[list.size()]));
DocumentPage page = docManager.search(deFinition,1L);

任何帮助将不胜感激。

谢谢, 啊

解决方法

一种方法是使用 TDE 将 payload/(a|b) 投影到两列视图中。

在 Java API 中,RowManager 然后可以根据这些列的条件匹配文档。使用 joinDoc() 操作加入并返回文档的全部内容。

另一种方法是在 payload/a 上定义路径范围索引,从而消除 payload/c/d/a 下的误报。范围索引的问题在于它们是重量级的(因为它们是内存映射的,无论是否使用它们都会使用资源)并且提供了不太通用的解决方案。

希望有所帮助,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?