cts.rangeQuery( index as cts.reference[], operator as String, value as (String | Number | Boolean | null | Array | Object)[], [options as String[]], [weight as Number?] ) as cts.rangeQuery
Returns a cts:query
matching specified nodes with a
range-index entry compared to a given value. Searches with the
cts:range-query
constructor require a range index;
if there is no range index configured, then an exception is thrown.
If you want to constrain on a range of values, you can combine multiple
cts:range-query
constructors together
with cts:and-query
or any of the other composable
cts:query
constructors, as in the last part of the example
below.
If neither "cached" nor "uncached" is present, it specifies "cached".
Negative "min-occurs" or "max-occurs" values will be treated as 0 and non-integral values will be rounded down. An error will be raised if the "min-occurs" value is greater than the "max-occurs" value.
"score-function=linear" means that values that are further away from the bounds will score higher. "score-function=reciprocal" means that values that are closer to the bounds will score higher. The functions are scaled appropriately for different types, so that in general the default slope factor will provide useful results. Using a slope factor greater than 1 gives distinct scores over a smaller range of values, and produces generally higher scores. Using a slope factor less than 1 gives distinct scores over a wider range of values, and produces generally lower scores.
// create a document with test data declareUpdate(); xdmp.documentInsert("/dates.xml", xdmp.unquote('<root>\n\ <entry>\n\ <date>2007-01-01</date>\n\ <info>Some information.</info>\n\ </entry>\n\ <entry>\n\ <date>2006-06-23</date>\n\ <info>Some other information.</info>\n\ </entry>\n\ <entry>\n\ <date>1971-12-23</date>\n\ <info>Some different information.</info>\n\ </entry>\n\ </root>')); ***** // requires a range index of // type xs.date on element "date" const res = []; for (const x of cts.search( cts.rangeQuery(cts.elementReference(xs.QName("date")), "<=", xs.date("2000-01-01")))){ res.push(x.xpath("/root/entry")); }; res; => returns an array with the following node: [ <entry> <date>1971-12-23</date> <info>Some different information.</info> </entry> ] ***** // requires a range index of // type xs:date on element "date" const res = new Array(); for (const x of cts.search( cts.andQuery(( cts.rangeQuery(cts.elementReference(xs.QName("date")), ">", xs.date("2006-01-01")), cts.rangeQuery(cts.elementReference(xs.QName("date")), "<", xs.date("2008-01-01"))))) ) { res.push(x.xpath("/root/entry")); } res; => returns an array with the following 2 nodes: <entry> <date>2007-01-01</date> <info>Some information.</info> </entry> <entry> <date>2006-06-23</date> <info>Some other information.</info> </entry>
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.