Hello MarkLogic专家,
请您使用MarkLogic范围查询建议如何获得以下样本结果。
XML
<entry min="100" max="999">
<product>apple</product>
</entry>
<entry min="1" max="99">
<product>orange</product>
</entry>
</root>
查询:
Query 1 : 200 >
结果应该是:apple
Query 2 : 200 <
结果应该是:苹果,橙色
Query 3 : 200 =>
结果应该是:apple
Query 4 : 200 <=
结果应该是:apple
Query 5 : 200 =
结果4:苹果
Query 6 : 150 to 250
结果应该是:apple
请帮助您对上述结果进行一些示例查询,谢谢
此致
的Dinesh
答案 0 :(得分:3)
如果我正确理解您的要求,对于单个运算符,您可以接受值和运算符作为输入(尽管您的示例中的=>
需要在MarkLogic中为>=
:< / p>
let $value := 200
let $operator := ">"
return
cts:search(doc()/entry,
cts:or-query((
cts:element-attribute-range-query(
xs:QName("entry"), xs:QName("min"), $operator, $value),
cts:element-attribute-range-query(
xs:QName("entry"), xs:QName("max"), $operator, $value)))
对于范围:
let $begin := 150
let $end := 250
return
cts:search(doc()/entry,
cts:and-query((
cts:element-attribute-range-query(
xs:QName("entry"), xs:QName("min"), ">=", $begin),
cts:element-attribute-range-query(
xs:QName("entry"), xs:QName("max"), "<=", $end)))
当然,您需要在这些属性值上构建范围索引,否则这些查询将引发异常。