在我的marklogic数据配置文件中,我有一个功能实体查询谁在执行这项工作:
<entity processor="MarkLogicEntityProcessor" pk="id"
preImportDeleteQuery="[...]"
query="
declare namespace xms='[...]';
declare namespace gm='[...]';
declare namespace qc='[...]';
declare variable $stop as xs:integer external;
declare variable $start as xs:integer external;
let $doc_list := cts:search(collection(),
cts:and-query((
cts:directory-query(('[...]'),'infinity'),
cts:or-query((
cts:element-value-query(fn:QName('[...]','id'),'id_1'),
cts:element-value-query(fn:QName('[...]','id'),'id_2'),
cts:element-value-query(fn:QName('[...]','id'),'id_3'),
cts:element-value-query(fn:QName('[...]','id'),'id_4'),
cts:element-value-query(fn:QName('[...]','id'),'id_5'),
[...]
)),
cts:element-query(fn:QName('[...]','key'),cts:and-query(()))
))
,'unfiltered')
[$start to $stop]
return ($doc_list)"
但是有没有办法用来自SQL请求的自定义id列表替换cts:or-query的多个cts:element-value-query行呢?
多谢帮忙
1条答案
按热度按时间ql3eal8s1#
cts:element-value-query()的函数签名允许传入多个值。如果任何值匹配,它就匹配--也允许您删除
cts:or-query()
。如果您以字符串序列的形式提供ID,类似这样的操作应该可以工作。