java - 如何基于字段对 MarkLogic 9 Optic Java API 的结果进行分区
问题描述
我正在研究 MarkLogic 9 Optic Java API 来构建一个复杂的查询来执行一些操作并返回结果。下面是我的代码构建的示例查询(使用 com.marklogic.client.expression.PlanBuilder 和 com.marklogic.client.expression.PlanBuilder.ModifyPlan 类):
op:from-view(recordsSchema, recordsView).op:join-inner(op:from-view(productsSchema, productsView), op:on(op:view-col(recordsView, md5Digest), op:view-col(productsView, md5Digest))).op:join-inner(op:from-view(occurrencesSchema, occurrencesView), op:on(op:view-col(productsView, md5Digest), op:view-col(occurrencesView, md5Digest)))
.op:where(op:or(op:and(fn:contains(op:col(adDescription), SNACK FOODS), op:eq(op:col(pageNumber), 5)), op:and(op:eq(op:col(state), KY), op:eq(op:col(issue), 2018-01-21))))
.op:select((op:col(pageNumber), op:col(state), op:col(adDescription), op:col(issue)))
.op:order-by(op:desc(op:col(issue)))
现在我想通过一个字段来划分这些结果,比如报纸,这样结果中的行数是相同的,但是它们是根据提供的字段进行隔离的,例如:
Newspaper 1:
[row 1]
[row 2]
[row 3]
Newspaper 2:
[row 1]
[row 2]
等等.. 在 SQL 中,这可以通过使用 rank() 函数和 PARTITION BY 来完成。但是我在 Optic API 中找不到等效的函数来执行此操作。另一种可能的方法是为此字段使用额外的“排序依据”(在本例中为报纸);找到不同的值(例如,报纸 1、报纸 2);然后在结果集上运行带有 where 的选择查询,并通过将这些结果子集保存在变量和某些数据结构(如 List)中来使用这些结果子集。但这似乎有点太复杂了。我觉得应该有一个更简单的方法来做到这一点。ModifyPlan 有一个方法 groupBy() 但它将与该字段匹配的所有行折叠成一行 - 而我想保留总行数。任何有关如何实现这一目标的帮助/意见将不胜感激。- 斯瓦蒂语
解决方案
推荐阅读
- qgis - QGIS:为我的项目创建 HTML 网络地图时出现问题
- apache-kafka - 基于安装的 Confluent Operator:可从本地计算机访问 k8 集群
- r - R中.xlsx文件中的日期问题
- java - Java OpenGL未正确绘制垂直线
- c# - 如何根据 Combobox Selection 记录在 ButtonClick 中存储文件位置?
- javascript - 按住按钮时递增 - 材质 ui
- python-3.x - 使用条件二进制指示符填充缺失值
- sql - 进行 SQL 查询以查找位于同一国家/地区的所有城市对
- jquery - 如何使用 forloop 和模板模型?
- javascript - 如何使用反应删除组件卸载上的 div?