获取与元素范围索引的交集
Get intersection with element range index
如何以优化的方式获取现有元素范围索引和单词序列之间的交集?
我的重点是内存优化,我知道我可以使用 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 应该有效。 [关于由此可能产生的意外后果的强制性免责声明]
如何以优化的方式获取现有元素范围索引和单词序列之间的交集?
我的重点是内存优化,我知道我可以使用 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 应该有效。 [关于由此可能产生的意外后果的强制性免责声明]