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

Reply via email to