如何以一种优化的方式获得现有元素范围索引和单词序列之间的交集?
我在这里的重点是内存优化,我知道我可以使用cts:element-values获取数据并使用map对象完成这项工作。但是,如果有一个查询直接与缓存的范围索引进行此交叉,为什么我应该这样做。
前任:
范围索引(test1,test2,test3)/序列(test1,test4,test5)
查询结果= test1
知道为一个单词列表创建的范围索引存在于一个文档中。我尽量避免将它们放在单独的文档中,以及避免使用碎片。
我相信这将为您解决问题:
let $myIndex := "myIndex"
let $sequence := ("one", "two two", "three")
let $or-query := cts:or-query(($sequence ! cts:word-query(.)))
return
cts:element-values(xs:QName($myIndex),(),(), cts:element-query(xs:QName($myIndex), $or-query ))
根据您在下面的评论,这有点麻烦,但是我能够达到我认为的预期结果:
fn:distinct-values(
cts:search(//lastname,
cts:or-query(($sequence !
cts:element-query(xs:QName("lastname"),
cts:element-value-query(xs:QName("lastname"), ., "self")
)
))
)/string()
)
只需在开始时将XPath更改为所需的元素以及element-query中的QName即可。那是否比元素值更快,并检查映射中的每个值,我无法告诉您。
如果这些值实际上仅在单个文档中专门用于存储它们,则可以尝试的第三种方法是更改数据库碎片策略。然后,我的方法#1应该起作用。[关于由此可能引起的意外后果的强制性免责声明]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句