0

您好 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   > 

结果应该是:苹果

Query 2 : 200   <

结果应该是:苹果、橙子

Query 3 : 200 =>

结果应该是:苹果

Query 4 : 200 <=

结果应该是:苹果

Query 5 : 200 =

结果4:苹果

Query 6 : 150 to 250

结果应该是:苹果

请帮助对上述结果进行一些示例查询,谢谢

问候,

迪内什

4

1 回答 1

4

如果我正确理解您的要求,对于单个运算符,您可以接受值和运算符作为输入(尽管=>您的示例需要>=在 MarkLogic 中):

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

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

于 2015-02-02T17:36:09.157 回答