我需要从pod中导入模块来运行查询。
如果我使用下面的数据库ID运行简单查询,则无需导入模块,它正在运行。
let $queryParam := fn:concat("?query=",xdmp:url-encode($query),"&eval=",$dataBaseId,":123")
let $url := fn:concat($hostcqport,"/eval.xqy",$queryParam)
let $response := xdmp:http-post($url, $options)[2]
如果我有导入模块语句,则抛出错误(找不到文件)。
所以我尝试获取app-server id并尝试传递,而不是如下所示的数据库ID,
let $queryParam := fn:concat("?query=",xdmp:url-encode($query),"&eval=",$serverId,":123")
let $url := fn:concat($hostcqport,"/eval.xqy",$queryParam)
let $response := xdmp:http-post($url, $options)[2]
如何传递server-id以使查询针对特定的app-server执行。
答案 0 :(得分:1)
这是MarkLogic 8或更早版本(我问,因为8上的重写选项允许在执行之前动态切换模块数据库(在许多其他令人惊叹的好东西中)。这可能是你想要的,因为你可以查看查询参数at这一点,并在重写规则中构建逻辑。
否则,您能否更详细地解释 您最终要完成的工作。当您的代码运行时,它已经在特定的App服务器的上下文中执行 - 所以要求通过分析查询参数对另一个应用服务器执行是有点太晚了(因为您已经在使用应用服务器)。
[edit] 以下内容是对自提供的评论的回应。这是一个混乱的回应,因为实际的票和评论仍然不是一个完全清晰的图片。但如果你把它们拼接在一起,那么现在就存在一个我可以回复的问题陈述。
该问题的原作者通过评论确认他们"尝试在不同于您实际发布的节点上的应用服务器上点击"
好的..这是对该澄清的回应: 这是不可能的。您的请求已由您使用http请求命中的节点上的线程处理。 Marklogic是一个集群,但它不共享线程(或其他任何事情)。选择是: