给定文档中的json属性,我需要获取集合中所有文档中该属性的所有不同值。这是否可以使用marklogic java客户机api实现?
例如,我有3个类型为“mydocument”的文档,属性为“myproperty”-
mydocument1.json文件
{
"myProperty":"val1"
}
mydocument2.json文件
{
"myProperty":"val1"
}
mydocument3.json文件
{
"myProperty":"val2"
}
我想搜索“myproperty”的所有不同值,即结果应该是“val1”和“val2”。
如果我能用这些不同的值对文档进行分组。例如。,
{
"val1": [
{
"myProperty":"val1"
},
{
"myProperty":"val1"
}
],
"val2": [
{
"myProperty":"val2"
}
]
}
我很感激你的帮助和帮助。提前谢谢!
更新:
我可以使用qconsole得到我想要的结果,但是使用xquery。我就是这么做的-
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
let $options :=
<options xmlns="http://marklogic.com/appservices/search">
<values name="myProperty">
<range type="string" facet="true">
<json-property>myProperty</json-property>
</range>
</values>
</options>
return search:values("myProperty", $options)
我得到的结果是-
<search:values-response name="myProperty" type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:search="http://marklogic.com/appservices/search">
<search:distinct-value frequency="2">val1</search:distinct-value>
<search:distinct-value frequency="1">val2</search:distinct-value>
</search:values>
现在我需要使用java客户机api来实现这一点。
2条答案
按热度按时间35g0bw711#
只是为了突出java应用程序中的marklogic javascript api:
在搜索json属性或路径上创建元素或路径范围索引。
构造一个服务器端javascript以利用marklogic performant搜索引擎(它可以在数百万个文档中以秒为单位返回复杂的搜索结果):
调用java eval调用,迭代并返回搜索结果:
当搜索条件更复杂时,您可以构建开箱即用的查询选项| | optic | | jsearch api,全部使用marklogic java api方言。
0sgqnhkj2#
最简单的解决方案是对该属性使用范围索引,以便使用以下函数从词典中选择值:https://docs.marklogic.com/cts:值
否则,您可以尝试暴力方法。您可以遍历每个文档,选择属性的值并放入Map中,然后从Map中报告键。
如果您有一个具有该json属性的文档集合,那么在单个查询中收集数据时可能会遇到超时或扩展树缓存错误。您可以运行corb作业,将该属性的值写入输出文件,并使用该值应用export file sort选项
ascending|distinct