cts:json-property-range-query
cts:json-property-range-query(
$property-name as xs:string*,
$operator as xs:string,
$value as xs:anyAtomicType*,
[$options as xs:string*],
[$weight as xs:double?]
) as cts:json-property-range-query
Summary
Returns a cts:query
matching JSON properties by name with a
range-index entry equal to a given value. Searches with the
cts:json-property-range-query
constructor require a property range index on the specified names;
if there is no range index configured, then an exception is thrown.
Parameters |
property-name |
One or more property name to match.
When multiple names are specified,
the query matches if any name matches.
|
operator |
A comparison operator.
Operators include:
- "<"
- Match range index values less than $value.
- "<="
- Match range index values less than or equal to $value.
- ">"
- Match range index values greater than $value.
- ">="
- Match range index values greater than or equal to $value.
- "="
- Match range index values equal to $value.
- "!="
- Match range index values not equal to $value.
|
$value |
One or more property values to match.
When multiple values are specified,
the query matches if any value matches. The value must be a type for
which there is a range index defined.
|
options |
Options to this query. The default is ().
Options include:
- "collation=URI"
- Use the range index with the collation specified by
URI. If not specified, then the default collation
from the query is used. If a range index with the specified
collation does not exist, an error is thrown.
- "cached"
- Cache the results of this query in the list cache.
- "uncached"
- Do not cache the results of this query in the list cache.
- "min-occurs=number"
- Specifies the minimum number of occurrences required. If
fewer that this number of words occur, the fragment does not match.
The default is 1.
- "max-occurs=number"
- Specifies the maximum number of occurrences required. If
more than this number of words occur, the fragment does not match.
The default is unbounded.
- "score-function=function"
- Use the selected scoring function. The score function may be:
- linear
- Use a linear function of the difference between the
specified query value and the matching value in the index to calculate
a score for this range query.
- reciprocal
- Use a reciprocal function of the difference
between the specified query value and the matching value in the
index to calculate a score for this range query.
- zero
- This range query does not contribute to the
score. This is the default.
- "slope-factor=number"
- Apply the given number as a scaling factor to the slope of the
scoring function. The default is 1.0.
- "synonym"
- Specifies that all of the terms in the $value parameter are
considered synonyms for scoring purposes. The result is that
occurrences of more than one of the synonyms are scored as if
there are more occurrences of the same term (as opposed to
having a separate term that contributes to score).
|
weight |
A weight for this query. The default is 1.0.
|
Usage Notes
If you want to constrain on a range of values, you can combine multiple
cts:json-property-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".
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.
Example
(: Suppose there are three documents in the database :)
1.json:
{
"entry" : {
"date" : "2007-01-01",
"info" : "Some information."
}
}
2.json:
{
"entry" : {
"date" : "2006-06-23",
"info" : "Some other information."
}
}
3.json:
{
"entry" : {
"date" : "1971-12-23",
"info" : "Some different information."
}
}
(:
requires a property (range) index of
type xs:date on "date"
:)
cts:search(fn:collection(),
cts:json-property-range-query("date", "<=",
xs:date("2000-01-01")))
(:
returns the third document
:)
Copyright © 2024 MarkLogic Corporation. MARKLOGIC is a
registered trademark of MarkLogic Corporation.