为了账号安全,请及时绑定邮箱和手机立即绑定

由于 XQuery 持续时间过长而导致的内部服务器错误 (MarkLogic)

由于 XQuery 持续时间过长而导致的内部服务器错误 (MarkLogic)

红糖糍粑 2022-09-07 16:40:25
我目前正在使用MarkLogic提供的Java API运行一些查询。我已通过将所需的依赖项添加到我的库中来安装它。连接是使用以下命令设置的DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);从这里开始,一些XQueries使用下面显示的代码运行ServerEvaluationCall evl = client.newServerEval().xquery(query);EvalResultIterator evr = evl.eval();while(evr.hasNext()){//Do something with the results}但是,某些查询需要很长时间才能处理,从而导致内部错误。因此,除了减少所需的查询时间外,我想知道是否有办法克服这个问题?例如,增加连接时间限制。====更新===使用的查询xquery version "1.0-ml";let $query-opts := /comments[fn:matches(text,".*generation.*")]return($query-opts, fn:count($query-opts), xdmp:elapsed-time())我知道使用的正则表达式可以很容易地被单词查询所取代。但是对于这个例子,我只想使用正则表达式进行搜索。示例数据<comments><date_commented>1998-01-14T04:32:30</date_commented><text>iCloud sync settings are not supposed to change after an iOS update. In the case of iOS 10.3 this was due to a bug.</text><uri>/comment/000000001415898</uri></comments>
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

根据您提供的数据,我将使用cts查询。xdmp:estimate


xdmp:estimate(cts:search(doc(), cts:and-query((

  cts:directory-query('/comment/'),

  cts:element-word-query(xs:QName("text"), "generation")

))))

这将在目录中的所有文档中搜索包含单词 的元素。如您所知,这将仅使用索引,不需要加载/解析文档。/comments/textgeneration


这也不会发现任何误报,因为每个文档/片段只有一个元素(如果您显示的数据正确)。text


查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信