Marklogic 在数据中心使用文档值进行选择性协调
是否有可能不仅根据集合筛选文档,而且根据特定文档的值有选择地协调文档 目前,以下是Data Hub中我的收集器插件的示例代码:Marklogic 在数据中心使用文档值进行选择性协调,marklogic,marklogic-dhf,Marklogic,Marklogic Dhf,是否有可能不仅根据集合筛选文档,而且根据特定文档的值有选择地协调文档 目前,以下是Data Hub中我的收集器插件的示例代码: /* * Collect IDs plugin * * @param options - a map containing options. Options are sent from Java * * @return - an array of ids or uris */ function collect(options) { // by default we re
/*
* Collect IDs plugin
*
* @param options - a map containing options. Options are sent from Java
*
* @return - an array of ids or uris
*/
function collect(options) {
// by default we return the URIs in the same collection as the Entity name
return cts.uris(null, null, cts.andQuery([cts.collectionQuery("LoadCollection"),cts.collectionQuery("SourceCollection"), cts.collectionQuery("Entity1")]));
module.exports = {collect: collect
};
如果我想在筛选器中包含文档中的特定值(按ElementID筛选),我应该添加什么代码修改来仅协调特定文档与此元素筛选器
以下是Entity1的示例文档:
<envelope xmlns="http://marklogic.com/entity-services">
<headers/>
<triples/>
<instance>
<Entity1 xmlns="">
<ElementID>WM</Element1>
<Color>Red</Color>
<Shape>Circle</Shape>
<Size>Small</Size>
<Location></Location>
</Entity1>
<attachments/>
西医
红色
圆圈
小的
您只需修改
收集器.xqy
代码,如下所示-
let $uris := cts:search(doc()/*:envelope/*:instance/*:Entity1,
cts:and-query((
cts:element-value-query(xs:QName("ElementID"),"WM","exact"),
cts:collection-query(("YourCollectionName"))
)) )
for $i in $uris
return fn:base-uri($i)
请注意,我在XQuery
中编写了这段代码,但是您的收集器.xqy
在JavaScript
中查找
据我所知,您也可以使用XQuery
代码,只需根据您的要求进行少量修改。您需要:
嗨,沙利尼!谢谢你的回复。你有Javascript的代码版本吗?我试图自己转换它,但遇到错误我不太擅长JavaScript。但我认为您可以尝试修改它,如cts:search-->cts.search等。只需修改一些语法就可以了。@Shalini这段代码在功能上是正确的,但效率很低。使用cts:URI比将文档加载到内存中、迭代它们并确定URI要快得多。cts:search的第一个参数中的XPath表达式也是不必要的。@RobS。谢谢你的反馈。我将按照您在我的本地主机中使用cts:uris所说的方式进行测试。@Rob我编写的XQuery看起来正确吗?:)我只是想知道这是否能正常工作。要补充Rob提供的答案:您可以在这里使用所有cts查询,并且您也不必仅使用cts.uri。正如代码上面的注释所述:
@return-一个ID或URI数组
。您还可以使用诸如cts:values而不是cts:uri之类的内容,基于某些范围索引返回唯一的值。
cts.uris(null, null, cts.andQuery([cts.elementValueQuery(xs.QName("ElementId"), "WM"), cts.collectionQuery("LoadCollection"), cts.collectionQuery("SourceCollection"), cts.collectionQuery("Entity1")]));