cts.pathRangeQuery( path-expression as String[], operator as String, value as any[], [options as String[]], [weight as Number?] ) as cts.pathRangeQuery
Returns a cts:query
matching documents where the content
addressed by an XPath expression satisfies the specified relationship
(=, <, >, etc.) with respect to the input criteria values. A path range
index must exist for each path when you perform a search.
If you want to constrain on a range of values, you can combine multiple
cts:path-range-query
constructors together
with cts:and-query
or any of the other composable
cts:query
constructors.
If neither "cached" nor "uncached" is present, it specifies "cached".
The "cached-incremental" option can improve performance if you repeatedly perform range queries on date or dateTime values over a short range that does not vary widely over short period of time. To benefit, the operator should remain the same "direction" (<,<=, or >,>=) across calls, the bounding date or dateTime changes slightly across calls, and the query runs very frequently (multiple times per minute). Note that using this options creates significantly more cached queries than the "cached" option.
The "cached-incremental" option has the following restrictions and interactions: The "min-occurs" and "max-occurs" options will be ignored if you use "cached-incremental" in unfiltered search. You can only use "score-function=zero" with "cached-incremental". The "cached-incremenal" option behaves like "cached" if you are not querying date or dateTime values.
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.
Use cts.rangeQuery if you need to include namespace bindings in your path range query.
// Insert few documents with test data. Requires a // path (range) index of type xs:string on path "/name/fname". declareUpdate(); xdmp.documentInsert("/aname1.xml", fn.head(xdmp.unquote( '<name><fname>John</fname><mname>Rob</mname><lname>Goldings</lname></name>') )); xdmp.documentInsert("/aname2.xml", fn.head(xdmp.unquote( '<name><fname>Jim</fname><mname>Ken</mname><lname>Kurla</lname></name>') )); xdmp.documentInsert("/aname3.xml", fn.head(xdmp.unquote( '<name><fname>Ooi</fname><mname>Ben</mname><lname>Fu</lname></name>') )); xdmp.documentInsert("/aname4.xml", fn.head(xdmp.unquote( '<name><fname>James</fname><mname>Rick</mname><lname>Tod</lname></name>') )); ***** // Requires a path (range) index of type xs:string on path "/name/fname". cts.contains(fn.doc(),cts.pathRangeQuery("/name/fname","=","John")) => true cts.search(cts.pathRangeQuery("/name/fname",">","Jim"),"filtered"); => <?xml version="1.0" encoding="UTF-8"?> <name><fname>John</fname><mname>Rob</mname><lname>Goldings</lname></name> <?xml version="1.0" encoding="UTF-8"?> <name><fname>Ooi</fname><mname>Ben</mname><lname>Fu</lname></name> cts.search(cts.pathRangeQuery("/name/fname","<","John"),"unfiltered"); => <?xml version="1.0" encoding="UTF-8"?> <name><fname>Jim</fname><mname>Ken</mname><lname>Kurla</lname></name> <?xml version="1.0" encoding="UTF-8"?> <name><fname>James</fname><mname>Rick</mname><lname>Tod</lname></name>