cts.elementValueQuery( element-name as xs.QName[], [text as String[]], [options as String[]], [weight as Number?] ) as cts.elementValueQuery
Returns a query matching elements by name with text content equal a
given phrase. cts:element-value-query
only matches against
simple elements (that is, elements that contain only text and have no element
children).
Parameters | |
---|---|
element-name | One or more element QNames to match. When multiple QNames are specified, the query matches if any QName matches. |
text | One or more element values to match. When multiple strings are specified, the query matches if any string matches. |
options |
Options to this query. The default is ().
Options include:
|
weight | A weight for this query. Higher weights move search results up in the relevance order. The default is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. |
If neither "case-sensitive" nor "case-insensitive" is present, $text is used to determine case sensitivity. If $text contains no uppercase, it specifies "case-insensitive". If $text contains uppercase, it specifies "case-sensitive".
If neither "diacritic-sensitive" nor "diacritic-insensitive" is present, $text is used to determine diacritic sensitivity. If $text contains no diacritics, it specifies "diacritic-insensitive". If $text contains diacritics, it specifies "diacritic-sensitive".
If neither "punctuation-sensitive" nor "punctuation-insensitive" is present, $text is used to determine punctuation sensitivity. If $text contains no punctuation, it specifies "punctuation-insensitive". If $text contains punctuation, it specifies "punctuation-sensitive".
If neither "whitespace-sensitive" nor "whitespace-insensitive" is present, the query is "whitespace-insensitive".
If neither "wildcarded" nor "unwildcarded" is present, the database configuration and $text determine wildcarding. If the database has any wildcard indexes enabled ("three character searches", "two character searches", "one character searches", or "trailing wildcard searches") and if $text contains either of the wildcard characters '?' or '*', it specifies "wildcarded". Otherwise it specifies "unwildcarded".
If neither "stemmed" nor "unstemmed" is present, the database configuration determines stemming. If the database has "stemmed searches" enabled, it specifies "stemmed". Otherwise it specifies "unstemmed". If the query is a wildcarded query and also a phrase query (contains two or more terms), the wildcard terms in the query are unstemmed.
When you use the "exact" option, you should also enable "fast case sensitive searches" and "fast diacritic sensitive searches" in your database configuration.
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.
Note that the text content for the value in a
cts:element-value-query
is treated the same as a phrase in a
cts:word-query
, where the phrase is the element value.
Therefore, any wildcard and/or stemming rules are treated like a phrase.
For example, if you have an element value of "hello friend" with wildcarding
enabled for a query, a cts:element-value-query
for "he*" will
not match because the wildcard matches do not span word boundaries, but a
cts:element-value-query
for "hello *" will match. A search
for "*" will match, because a "*" wildcard by itself is defined to match
the value. Similarly, stemming rules are applied to each term, so a
search for "hello friends" would match when stemming is enabled for the query
because "friends" matches "friend". For an example, see the
fourth example that follows.
Similarly, because a "*" wildcard by itself is defined to match
the value, the following query will match any element with the
QName my-element
, regardless of the wildcard indexes enabled in
the database configuration:
cts:element-value-query(xs:QName("my-element"), "*", "wildcarded")
cts.search( cts.elementValueQuery( xs.QName("function"), "MarkLogic Corporation")); => .. relevance-ordered sequence of documents having 'function' elements whose text content equals 'MarkLogic Corporation'.
cts.search( cts.elementValueQuery( xs.QName("function"), "MarkLogic Corporation", "case-insensitive")); => .. relevance-ordered sequence of documents having 'function' elements whose text content equals 'MarkLogic Corporation', or any other case-shift like 'MARKLOGIC CorpoRation'.
cts.search( cts.andQuery([ cts.elementValueQuery( xs.QName("function"), "MarkLogic Corporation", "punctuation-insensitive", 0.5), cts.elementValueQuery( xs.QName("title"), "Word Query")])); => .. relevance-ordered sequence of documents having both: (a) 'function' elements with text content equal to 'MarkLogic Corporation', ignoring embedded punctuation, AND (b) 'title' elements with text content equal to 'Word Query', with the results of the first sub-query query given weight 0.5, and the results of the second sub-query given the default weight 1.0. As a result, the title phrase 'Word Query' counts more heavily towards the relevance score.
const node = fn.head(xdmp.unquote('<my-node>hello friend</my-node>')).root; const res = new Array(); res.push(cts.contains(node, cts.elementValueQuery(xs.QName('my-node'), "hello friends", "stemmed"))); res.push(cts.contains(node, cts.elementValueQuery(xs.QName('my-node'), "he*", "wildcarded"))); res.push(cts.contains(node, cts.elementValueQuery(xs.QName('my-node'), "hello f*", "wildcarded"))); res; => [true, false, true]
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.