solr 事实上有多个cts:element-value-query,但只有一个SQL请求结果

tyu7yeag  于 2023-03-02  发布在  Solr
关注(0)|答案(1)|浏览(148)

在我的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行呢?
多谢帮忙

ql3eal8s

ql3eal8s1#

cts:element-value-query()的函数签名允许传入多个值。如果任何值匹配,它就匹配--也允许您删除cts:or-query()。如果您以字符串序列的形式提供ID,类似这样的操作应该可以工作。

<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 $ids := ("id_1", "id_2", "id_4", "id_4", "id_5", [...]) (: some list supplied from other code:)
    let $doc_list := cts:search(collection(),
        cts:and-query((
                cts:directory-query(('[...]'),'infinity'),
                cts:element-value-query(fn:QName('[...]','id'), $ids),
                cts:element-query(fn:QName('[...]','key'),cts:and-query(()))
        ))
    ,'unfiltered')
    [$start to $stop]
    return ($doc_list)"

相关问题