MarkLogic范围查询

时间:2015-02-02 16:05:01

标签: marklogic range-query

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

1 个答案:

答案 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)))

当然,您需要在这些属性值上构建范围索引,否则这些查询将引发异常。