我正在使用cts:element-value-match()
在大量icd-10代码(超过70K项)中查找值。由于我们使用了字符串范围索引,结果很快就会返回。有没有快速的方法来找到匹配父节点的cts:element-value-match()?
项目的结构是这样的:
<item>
<value>E232</value>
<label>Diabetes insipidus</label>
<item>
这里是我如何打电话cts:element-value-match()
样本:
cts:element-value-match(xs:QName("label"), '*diabetes*', $options)
然而,cts:element-value-match()
刚刚返回值的字符串。现在我需要一个快速的方法来找出这个值的父节点。我似乎可以这样做的唯一方法是使用非常慢的XPath表达式,并将字符串与文档中的每个标签进行比较。
let $value:= /codes/items/item[label = $label]/value
是否有某种方式来获得结果字符串父节点?如果不是,我应该使用cts:element-value-match()
以外的其他功能吗?或者,我应该创建一个结合值/标签对的字段并只搜索该字段?
谢谢你的建议Mads。我尝试了你的建议并使用了doc()函数,但它仍然同样缓慢,因为尽管标签上有范围索引,但每次查找都必须进行70K以上的比较。我们正在使用ML-9,但并非我们所有的环境都升级了,而SQL和Optic API似乎有点矫枉过正。我意识到我可以将每个- 分割成一个单独的文件,然后使用cts:word-query(),但每个文件还有额外的800字节开销。我仍然在寻找构建一个复合元素来连接这两个值并在该元素上构建一个范围索引。 –
我也考虑过三倍,可能值得一看。缺点是没有'cts:triple-match',但在SPARQL中有正则表达式和通配符选项。 – grtjn