Как разделить результаты API-интерфейса MarkLogic 9 Optic на основе поля - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над 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 для этого. Другим возможным способом сделать это может быть использование дополнительного 'order by' для этого поля (газета, в данном примере); найти различные значения (например, газета 1, газета 2); затем запустите запрос на выборку с набором результатов where и используйте эти подмножества результатов, удерживая их в переменной и в некоторой структуре данных, такой как List. Но это кажется слишком сложным. Я чувствую, что должен быть более простой способ сделать это. У ModifyPlan есть метод groupBy (), но он объединяет все строки, соответствующие полю, в одну строку, в то время как я хочу сохранить общее количество строк. Любая помощь / мнение о том, как этого добиться, будет высоко оценена. - Свати

...