由于 XQuery 持续时间过长导致的内部服务器错误 (MarkLogic)
Internal Server Error due to long XQuery duration (MarkLogic)
我目前正在 运行 使用 MarkLogic 提供的 Java API 通过一些查询。我通过将所需的依赖项添加到我的库来安装它。使用
建立连接
DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);
从这里开始,一些 XQuery 运行 使用下面显示的代码
ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext()){
//Do something with the results
}
但是,某些查询需要很长时间才能处理,从而导致内部 error.So 除了减少所需的查询时间之外,我想知道是否有办法克服这个问题?比如增加连接时限等。
====更新===
已使用查询
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>
根据您提供的数据,我会使用 xdmp:estimate
和一个 cts 查询。
xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))
这将在您的 /comments/
目录中的所有文档中搜索包含单词 generation
的元素 text
。如您所知,这将仅使用索引,不需要 loading/parsing 个文档。
这也不会发现任何误报,因为每个 document/fragment 只有一个 text
元素(如果您显示的数据正确)。
我目前正在 运行 使用 MarkLogic 提供的 Java API 通过一些查询。我通过将所需的依赖项添加到我的库来安装它。使用
建立连接DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);
从这里开始,一些 XQuery 运行 使用下面显示的代码
ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext()){
//Do something with the results
}
但是,某些查询需要很长时间才能处理,从而导致内部 error.So 除了减少所需的查询时间之外,我想知道是否有办法克服这个问题?比如增加连接时限等。
====更新===
已使用查询
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>
根据您提供的数据,我会使用 xdmp:estimate
和一个 cts 查询。
xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))
这将在您的 /comments/
目录中的所有文档中搜索包含单词 generation
的元素 text
。如您所知,这将仅使用索引,不需要 loading/parsing 个文档。
这也不会发现任何误报,因为每个 document/fragment 只有一个 text
元素(如果您显示的数据正确)。