Hi, Luan:
Because the value is a string, the query is looking for a string range index.
Please try casting the value as in:
cts:element-attribute-range-query(xs:QName("accreditation:export"),
xs:QName("accreditation:totalCredits"), ">=", xs:float("5.5"))
Hoping that helps,
Erik Hennum
________________________________
From: [email protected]
[[email protected]] on behalf of
[email protected] [[email protected]]
Sent: Wednesday, July 31, 2013 3:24 PM
To: [email protected]
Subject: [MarkLogic Dev General] Element Attribute range index half working
Hi,
I created an element-attribute-range-index that works just fine in a standard
range constraint, but not working in a custom constraint when manually parsed.
Here is a snippet of the data: stripped down to show only the relevance.
xmlns:accreditation=http://optimus.com/view/accreditation
…
<accreditation:export accreditation:totalCredits="1.0" >
</accreditation:export>
Here is the script to create the index: Note that the doc say collation should
be “” unless the type is string or anyURI, but I also try setting it to
http://marklogic.com/collation/ with no different result
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("OPTIMUS_SEARCH_DEV")
let $rangespec := admin:database-range-element-attribute-index(
"float",
"http://optimus.com/view/accreditation",
"export",
"http://optimus.com/view/accreditation",
"totalCredits",
"",
fn:false())
return admin:save-configuration(
admin:database-add-range-element-attribute-index(
$config,
$dbid,
$rangespec))
This standard range constraint works just find for query like (totalCredits GE
5.5):
<search:constraint name="totalCredits">
<search:range type="xs:float" facet="false">
<search:element
ns="http://optimus.com/view/accreditation" name="export"/>
<search:attribute
ns="http://optimus.com/view/accreditation" name="totalCredits"/>
</search:range>
</search:constraint>
Also this script verify that the range index was created:
import module namespace admin= "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
declare variable $dbname := "OPTIMUS_SEARCH_DEV";
let $config := admin:get-configuration()
return
(admin:database-get-range-element-attribute-indexes($config,
xdmp:database($dbname) ),
admin:database-get-reindexer-enable($config, xdmp:database($dbname)) ),
try {
xdmp:eval('xquery version "1.0-ml"; declare namespace accreditation =
"http://optimus.com/view/accreditation";
cts:element-attribute-value-query(xs:QName("accreditation:export"),
xs:QName("accreditation:totalCredits"), "5.5")', (),
<options xmlns="xdmp:eval">
<database>{xdmp:database($dbname)}</database>
</options>)
}
catch ($e) { $e }
But a custom constraint like this failed:
<search:constraint name="creditsAccredited">
<search:custom facet="false">
<search:parse apply="parse"
ns="http://optimus.com/view/facet"
at="/creditsAccredited.xqy"/>
</search:custom>
</search:constraint>
File creditsAccredited.xqy has this:
let $creditsPortion :=
cts:element-attribute-range-query(xs:QName("accreditation:export"),
xs:QName("accreditation:totalCredits"), ">=", "5.5")
let $query := <root>{cts:element-query(xs:QName("accreditation:export"),
$creditsPortion)}</root>/*
The error is: Note that when no collation is given, ML seems to pick
http://marklogic.com/collation/codepoint . If I set (collation=’’) then it
failed to validate the URI. I then tried to recreate the range index with this
collation, but it simply ignored and always reported as an empty string.
XDMP-ELEMATTRRIDXNOTFOUND: cts:search(fn:collection(),
cts:and-query((cts:collection-query("type/program"), cts:word-query("Andrew
Test LC", ("lang=en"), 1),
cts:element-query(fn:QName("http://optimus.com/view/accreditation", "export"),
cts:element-attribute-range-query(fn:QName("http://optimus.com/view/accreditation",
"export"), fn:QName("http://optimus.com/view/accreditation", "totalCredits"),
">=", "9.0", ("collation=http://marklogic.com/collation/codepoint"), 1), ()),
...), ()), ("score-logtfidf", "faceted"), 1) -- No string element-attribute
range index for fn:QName("http://optimus.com/view/accreditation", "export")
fn:QName("http://optimus.com/view/accreditation", "totalCredits")
http://marklogic.com/collation/codepoint
Did I miss something here? Please help.
Thank you.
Luan
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general