Hi All, I'm facing a problem using the search:resolve function, this is the xquery:
xquery version "1.0-ml"; import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy"; import module namespace search="http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; let $query := <cts:and-query xmlns:cts="http://marklogic.com/cts"> { dls:documents-query() } <cts:not-query> <cts:collection-query> <cts:uri>error</cts:uri> <cts:uri>collection-A</cts:uri> <cts:uri>collection-B</cts:uri> </cts:collection-query> </cts:not-query> <cts:collection-query> <cts:uri>collection-C</cts:uri> <cts:uri>collection-D</cts:uri> </cts:collection-query> <cts:properties-query> <cts:element-query> <cts:element xmlns:ft="http://thecompany/facet">ft:author</cts:element> <cts:word-query qtextref="cts:text" xmlns:xs=" http://www.w3.org/2001/XMLSchema"> <cts:text>fiber</cts:text> <cts:option>case-insensitive</cts:option> <cts:option>diacritic-insensitive</cts:option> <cts:option>punctuation-insensitive</cts:option> <cts:option>whitespace-insensitive</cts:option> <cts:option>stemmed</cts:option> <cts:option>wildcarded</cts:option> </cts:word-query> </cts:element-query> </cts:properties-query> </cts:and-query> let $options := <options xmlns="http://marklogic.com/appservices/search"> <return-results>true</return-results> <constraint name="author"> <range type="xs:string"> <element ns="http://thecompany/facet" name="author"/> <fragment-scope>properties</fragment-scope> <facet-option>concurrent</facet-option> <facet-option>item-order</facet-option> <facet-option>ascending</facet-option> <facet-option>limit=6</facet-option> </range> </constraint> <term> <term-option>case-insensitive</term-option> <term-option>diacritic-insensitive</term-option> <term-option>punctuation-insensitive</term-option> <term-option>whitespace-insensitive</term-option> <term-option>stemmed</term-option> <term-option>wildcarded</term-option> </term> </options> return search:resolve($query, $options) The result is this one: <search:response total="32" start="1" page-length="10" xmlns="" xmlns:search="http://marklogic.com/appservices/search"> <search:facet name="author"> <search:facet-value name="author 1" count="1">author 1</search:facet-value> <search:facet-value name="author 2" count="1">author 2</search:facet-value> <search:facet-value name="author 3" count="1">author 3</search:facet-value> <search:facet-value name="author 4" count="1">author 4</search:facet-value> <search:facet-value name="author 5" count="1">author 5</search:facet-value> <search:facet-value name="author 6" count="1">author 6</search:facet-value> </search:facet> <search:metrics> <search:query-resolution-time>PT0.007S</search:query-resolution-time> <search:facet-resolution-time>PT0.002S</search:facet-resolution-time> <search:snippet-resolution-time>PT0S</search:snippet-resolution-time> <search:total-time>PT0.01S</search:total-time> </search:metrics> </search:response> In that case the facet is done using a element-range-index: <element ns="http://thecompany/facet" name="author"/> this element is in the properties, but the result is inconsistent too if we use an element in the document.* It is important to make notice that the facet and the results are CONSISTENT until we include a **<cts:element-query> in the query.* Watching the source, I noticed the functions: cts:element-values and cts:frequency are used to create the search:facet element. Then, I tried them directly and had the same result: xquery version "1.0-ml"; import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy"; let $facet-options := ("type=string", "properties", "descending", "frequency-order", "limit=6") let $query := cts:document-fragment-query( cts:and-query(( dls:documents-query(), cts:not-query(cts:collection-query(("error", "collection-A", "collection-B")), 1), cts:collection-query(("collection-C", "collection-D")), cts:properties-query( cts:element-query( fn:QName("http://thecompany/facet", "author"), cts:word-query( "fiber", ("case-insensitive","diacritic-insensitive","punctuation-insensitive","whitespace-insensitive","stemmed","wildcarded","lang=en"), 1 ), () ) ) ), ()) ) return cts:element-values(fn:QName("http://thecompany/facet","author"),(),($facet-options,"concurrent"),$query,1, ()) The response was: author 1 author 2 author 3 author 4 author 5 author 6 Now, executing a cts:search with the same $query value: xquery version "1.0-ml"; import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy"; let $query := cts:document-fragment-query( cts:and-query(( dls:documents-query(), cts:not-query(cts:collection-query(("error", "collection-A", "collection-B")), 1), cts:collection-query(("collection-C", "collection-D")), cts:properties-query( cts:element-query( fn:QName("http://thecompany/facet", "author"), cts:word-query( "fiber", ("case-insensitive","diacritic-insensitive","punctuation-insensitive","whitespace-insensitive","stemmed","wildcarded","lang=en"), 1 ), () ) ) ), ()) ) return cts:search(fn:collection(),$query) I got an empty sequence. Then the questions are: Why am I getting this inconsistencies when there is an element-query in the search? how can I avoid it? Thanks!
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
