首页 > 解决方案 > 将 cts:search 的逻辑转换为 search:search

问题描述

我一直在与cts:search我的项目合作,但不知何故,感觉结果时间比预期的要长一些。可以search:search帮忙吗?如果是这样,怎么做?

例如,我的查询为

let $query := cts:and-query((cts:element-value-query(xs:QName("Applicability"),"Yes"))) 

我想获取文档 URI。我正在使用:

cts:search(collection("abc"), $query) 

它返回了 URI,但是如何使用它来提取它search:search?或者除了搜索之外还有什么可以帮助提高执行时间的吗?

标签: searchxquerymarklogiccts-search

解决方案


您是对检索文档感兴趣,还是只对 URI 感兴趣?

如果您只想检索包含具有该值的元素的文档的 URI,请使用cts:uris()而不是cts:search(). 该cts:uris()函数未经过滤运行,只会从词典中返回 URI,而不是检索所有文档,这比cts:search不需要内容的成本高得多。

cts:uris("", (), cts:and-query(( collection("abc"), $query)) ) 

使用 时cts:search,我会尝试的第一件事是将unfiltered选项添加到您的搜索中,看看是否有帮助。

默认cts:search执行过滤:

过滤搜索(默认)。过滤搜索消除了任何误报匹配,并正确解决了同一片段中存在多个候选匹配的情况。过滤后的搜索结果完全满足指定cts:query

因此,尝试使用“未过滤”选项执行相同的查询:

cts:search(collection("abc"), $query, "unfiltered") 

您还可以使用 element-range-index 或 field-range- index在该 Applicability 元素上创建索引,然后使用适当的范围查询而不是值查询。


推荐阅读