Ma version de MarkLogic est la 9. J'ai deux requêtes qui renvoient des résultats attendus lorsqu'elles sont exécutées séparément, mais lorsque j'essaie de les combiner, je n'obtiens aucun résultat.
Mes données ressemblent à ce qui suit, je dois faire correspondre seulement ABC, pas ABC/* (ou ABC/D si c'est le critère recherché et dans ce cas, pas ABC/D/*).
<root xmlns:ns1="http://ns1">
<ns1:security>
<ns1:elem>ABC</ns1:elem>
<ns1:elem>ABC/D</ns1:elem>
<ns1:elem>ABC/D/E</ns1:elem>
</ns1:security>
</root>
Le code ci-dessous renvoie 4 résultats
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
search:resolve(
<cts:path-range-query operator="=" xmlns:ns1="http://ns1">
<cts:path-expression>//ns1:security/ns1:elem</cts:path-expression>
<cts:value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ABC</cts:value>
</cts:path-range-query>
)
et celui-ci seulement 3 résultats
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
search:resolve(
<cts:element-query>
<cts:element xmlns:ns1="http://ns1">ns1:security</cts:element>
<cts:element-value-query>
<cts:element xmlns:ns1="http://ns1">ns1:elem</cts:element>
<cts:text xml:lang="en">ABC/*</cts:text>
<cts:option>wildcarded</cts:option>
</cts:element-value-query>
</cts:element-query>
)
Je m'attendais donc à obtenir 1 résultat en exécutant ceci
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
search:resolve(
<cts:and-not-query>
<cts:positive>
<cts:path-range-query operator="=" xmlns:ns1="http://ns1">
<cts:path-expression>//ns1:security/ns1:elem</cts:path-expression>
<cts:value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ABC</cts:value>
</cts:path-range-query>
</cts:positive>
<cts:negative>
<cts:element-query>
<cts:element xmlns:ns1="http://ns1">ns1:security</cts:element>
<cts:element-value-query>
<cts:element xmlns:ns1="http://ns1">ns1:elem</cts:element>
<cts:text xml:lang="en">ABC/*</cts:text>
<cts:option>wildcarded</cts:option>
</cts:element-value-query>
</cts:element-query>
</cts:negative>
</cts:and-not-query>
)
J'ai aussi essayé ceci mais le résultat est le même
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
search:resolve(
<cts:and-query>
<cts:path-range-query operator="=" xmlns:ns1="http://ns1">
<cts:path-expression>//ns1:security/ns1:elem</cts:path-expression>
<cts:value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ABC</cts:value>
</cts:path-range-query>
<cts:not-query>
<cts:element-query>
<cts:element xmlns:ns1="http://ns1">ns1:security</cts:element>
<cts:element-value-query>
<cts:element xmlns:ns1="http://ns1">ns1:elem</cts:element>
<cts:text xml:lang="en">ABC/*</cts:text>
<cts:option>wildcarded</cts:option>
</cts:element-value-query>
</cts:element-query>
</cts:not-query>
</cts:and-query>
)
S'agit-il d'un bogue connu ? Est-ce que je fais quelque chose de mal ici ? Toute aide est appréciée :)
Plan de recherche
<search:response snippet-format="snippet" total="0" start="1" page-length="10" xmlns:search="http://marklogic.com/appservices/search">
<search:plan>
<qry:query-plan xmlns:qry="http://marklogic.com/cts/query">
<qry:expr-trace>impl:apply-search(map:map(<map:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .../>), "xdmp:plan", fn:false())</qry:expr-trace>
<qry:info-trace>Analyzing path for search: fn:collection()</qry:info-trace>
<qry:info-trace>Step 1 is searchable: fn:collection()</qry:info-trace>
<qry:info-trace>Path is fully searchable.</qry:info-trace>
<qry:info-trace>Gathering constraints.</qry:info-trace>
<qry:info-trace>Comparison contributed string range value constraint: //ns1:security/ns1:elem = "CTPA"</qry:info-trace>
<qry:partial-plan>
<qry:range-query weight="0" min-occurs="1" max-occurs="4294967295" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<qry:key>12785637774270294680</qry:key>
<qry:annotation>path(//ns1:security/ns1:elem)</qry:annotation>
<qry:lower-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:lower-bound>
<qry:upper-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:upper-bound>
</qry:range-query>
</qry:partial-plan>
<qry:elem-word-trace text="CTPA" elem-name="elem" elem-uri="http://ns1">
<qry:key>6185531260368494803</qry:key>
</qry:elem-word-trace>
<qry:info-trace>Search query contributed 1 constraint: cts:and-query((cts:path-range-query("//ns1:security/ns1:elem", "=", "CTPA", ("collation=http://marklogic.com/collation/"), 1), cts:not-query(cts:element-query(xs:QName("ns1:security"), cts:element-value-query(xs:QName("ns1:elem"), "CTPA/*", ("wildcarded","lang=en"), 1), ()), 1)), ())</qry:info-trace>
<qry:partial-plan>
<qry:and-not-two-queries>
<qry:range-query weight="0" min-occurs="1" max-occurs="4294967295" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<qry:key>12785637774270294680</qry:key>
<qry:annotation>path(//ns1:security/ns1:elem)</qry:annotation>
<qry:lower-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:lower-bound>
<qry:upper-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:upper-bound>
</qry:range-query>
<qry:and-two-queries>
<qry:or-two-queries>
<qry:term-query weight="0">
<qry:key>17253116673510471442</qry:key>
<qry:annotation>element(ns1:security)</qry:annotation>
</qry:term-query>
<qry:term-query weight="0">
<qry:key>12929598538251878498</qry:key>
<qry:annotation>link-child(descendant(element(ns1:security)))</qry:annotation>
</qry:term-query>
</qry:or-two-queries>
<qry:term-query weight="1">
<qry:key>6185531260368494803</qry:key>
<qry:annotation>element(http://one.oecd.org/ns1:elem,word("CTPA"))</qry:annotation>
</qry:term-query>
</qry:and-two-queries>
</qry:and-not-two-queries>
</qry:partial-plan>
<qry:info-trace>Executing search.</qry:info-trace>
<qry:ordering/>
<qry:final-plan>
<qry:and-query>
<qry:and-not-two-queries>
<qry:range-query weight="0" min-occurs="1" max-occurs="4294967295" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<qry:key>12785637774270294680</qry:key>
<qry:annotation>path(//ns1:security/ns1:elem)</qry:annotation>
<qry:lower-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:lower-bound>
<qry:upper-bound xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CTPA</qry:upper-bound>
</qry:range-query>
<qry:and-two-queries>
<qry:or-two-queries>
<qry:term-query weight="0">
<qry:key>17253116673510471442</qry:key>
<qry:annotation>element(ns1:security)</qry:annotation>
</qry:term-query>
<qry:term-query weight="0">
<qry:key>12929598538251878498</qry:key>
<qry:annotation>link-child(descendant(element(ns1:security)))</qry:annotation>
</qry:term-query>
</qry:or-two-queries>
<qry:term-query weight="1">
<qry:key>6185531260368494803</qry:key>
<qry:annotation>element(http://one.oecd.org/ns1:elem,word("CTPA"))</qry:annotation>
</qry:term-query>
</qry:and-two-queries>
</qry:and-not-two-queries>
</qry:and-query>
</qry:final-plan>
<qry:info-trace>Selected 0 fragments to filter</qry:info-trace>
<qry:result estimate="0"/>
</qry:query-plan>
</search:plan>
<search:metrics>
<search:query-resolution-time>PT0.001512S</search:query-resolution-time>
<search:total-time>PT0.0024561S</search:total-time>
</search:metrics>
</search:response>