Hi, Danny:

Yes, 7.0-5 and 8.0-1 and following should have the accurate total on the last 
page of search results where the last page has fewer results than the page 
length.

Note that if the last page happens to have the same number of results as the 
page length, the page can't be recognized as the last page.  In this case, the 
start offset of the first empty page will be the accurate total.


Hoping that helps,


Erik Hennum


________________________________
From: [email protected] 
[[email protected]] on behalf of Danny Sinang 
[[email protected]]
Sent: Wednesday, April 20, 2016 7:24 AM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Search API total not equal to number of 
search results

Hi Erik,

Would you know if this bug has been fixed already ?

Regards,
Danny

On Tue, Jan 6, 2015 at 11:15 AM, Erik Hennum 
<[email protected]<mailto:[email protected]>> wrote:
Hi, Danny:

Thanks for the additional information.  The total is set to the estimate based 
on the indexes.

That's pragmatic for pages other than the last page. In that case, we can 
calculate an accurate total based on the start page, page length, and result 
count.

I'll file a bug.


Erik Hennum

________________________________
From: 
[email protected]<mailto:[email protected]>
 
[[email protected]<mailto:[email protected]>]
 on behalf of Danny Sinang [[email protected]<mailto:[email protected]>]
Sent: Tuesday, January 06, 2015 6:24 AM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Search API total not equal to number of 
search results

One thing I discovered is that if I change "search-option" to "unfiltered", 
@total and the number of search results are both 88.

Regards,
Danny

On Tue, Jan 6, 2015 at 9:14 AM, Danny Sinang 
<[email protected]<mailto:[email protected]>> wrote:
Hi Erik,

Here's the query and the options :

xquery version "1.0-ml";


import module namespace search = "http://marklogic.com/appservices/search";
    at "/MarkLogic/appservices/search/search.xqy";

declare option xdmp:mapping "false";

declare variable $options :=
<options xmlns="http://marklogic.com/appservices/search";>
   <search-option>filtered</search-option>
   <debug>false</debug>
   <term>
     <empty apply="all-results"/>
     <term-option>wildcarded</term-option>
     <term-option>case-insensitive</term-option>
     <term-option>punctuation-sensitive</term-option>
     <term-option>diacritic-sensitive</term-option>
   </term>
   <grammar>
     <starter strength="30" apply="grouping" delimiter=")">(</starter>
     <starter strength="40" apply="prefix" element="cts:not-query">-</starter>
     <joiner strength="10" apply="infix" element="cts:or-query" 
tokenize="word">OR</joiner>
     <joiner strength="20" apply="infix" element="cts:and-query" 
tokenize="word">AND</joiner>
     <joiner strength="20" apply="element-joiner" 
ns="http://www.nejm.org/custom-field-query"; at="/lib/custom-fields.xqy" 
element="cts:element-query" tokenize="word">CHILD</joiner>
     <joiner strength="50" apply="constraint" compare="LT" 
tokenize="word">LT</joiner>
     <joiner strength="50" apply="constraint" compare="LE" 
tokenize="word">LE</joiner>
     <joiner strength="50" apply="constraint" compare="GT" 
tokenize="word">GT</joiner>
     <joiner strength="50" apply="constraint" compare="GE" 
tokenize="word">GE</joiner>
     <joiner strength="50" apply="constraint" compare="NE" 
tokenize="word">NE</joiner>
     <quotation>"</quotation>
     <joiner strength="50" apply="constraint">:</joiner>
   </grammar>
   <!--
   <searchable-expression>/questionAsset</searchable-expression>
   -->
   <constraint name="qbankId">
     <value>
       <element ns="" name="qBankId"/>
     </value>
   </constraint>
   <constraint name="key">
     <value>
       <element ns="" name="key"/>
     </value>
   </constraint>
   <constraint name="qId">
     <value>
       <element ns="" name="qId"/>
     </value>
   </constraint>
   <constraint name="productId">
     <value>
       <element ns="" name="productId"/>
     </value>
   </constraint>
   <constraint name="qAuthoringState">
     <value>
       <element ns="" name="qAuthoringState"/>
     </value>
   </constraint>
   <constraint name="qBankMembershipState">
     <value>
       <element ns="" name="qBankMembershipState"/>
     </value>
   </constraint>
   <constraint name="qApName">
     <value>
       <element ns="" name="qApName"/>
     </value>
   </constraint>
   <constraint name="accreditationTypeState">
     <value>
       <element ns="" name="accreditationTypeState"/>
     </value>
   </constraint>
   <constraint name="questionSetName">
     <value>
       <element ns="" name="questionSetName"/>
     </value>
   </constraint>
   <constraint name="qComments">
     <custom facet="false">
       <parse apply="qComments" ns="http://www.nejm.org/custom-field-query"; 
at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <constraint name="qSupplementGroup">
     <custom facet="false">
       <parse apply="qSupplementGroup" 
ns="http://www.nejm.org/custom-field-query"; at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <constraint name="qQuestionOfTheWeek">
     <custom facet="false">
       <parse apply="qQuestionOfTheWeek" 
ns="http://www.nejm.org/custom-field-query"; at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <constraint name="qFITB">
     <custom facet="false">
       <parse apply="qFITB" ns="http://www.nejm.org/custom-field-query"; 
at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <constraint name="qApDifferentiation">
     <range type="xs:double">
       <element ns="" name="qApDifferentiation"/>
     </range>
   </constraint>
   <constraint name="qApDiscrimination">
     <range type="xs:double">
       <element ns="" name="qApDiscrimination"/>
     </range>
   </constraint>
   <constraint name="qApRelevance">
     <range type="xs:double">
       <element ns="" name="qApRelevance"/>
     </range>
   </constraint>
   <constraint name="qCreatedDate">
     <range type="xs:dateTime">
       <element ns="" name="qCreatedDate"/>
     </range>
   </constraint>
   <constraint name="qLastModifiedDate">
     <range type="xs:dateTime">
       <element ns="" name="qLastModifiedDate"/>
     </range>
   </constraint>
   <constraint name="qAudiencePoolGroup">
     <element-query ns="" name="qAudiencePoolGroup"/>
   </constraint>
   <constraint name="qBankGroup">
     <element-query ns="" name="qBankGroup"/>
   </constraint>
   <constraint name="qBankDimensions">
     <element-query ns="" name="qBankDimensions"/>
   </constraint>
   <constraint name="dimensionFacts">
     <element-query ns="" name="dimensionFacts"/>
   </constraint>
   <constraint name="childDimension">
     <element-query ns="" name="childDimension"/>
   </constraint>
   <constraint name="name">
     <value>
       <element ns="" name="name"/>
     </value>
   </constraint>
   <constraint name="dimension">
     <custom facet="false">
       <parse apply="dimension" ns="http://www.nejm.org/custom-field-query"; 
at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <constraint name="entry">
     <element-query ns="" name="entry"/>
   </constraint>
   <constraint name="value">
     <element-query ns="" name="value"/>
   </constraint>
   <constraint name="subSpecialty">
     <custom facet="false">
       <parse apply="subSpecialty" ns="http://www.nejm.org/custom-field-query"; 
at="/lib/custom-fields.xqy"/>
     </custom>
   </constraint>
   <return-query>true</return-query>
   <return-facets>false</return-facets>
   <return-metrics>false</return-metrics>
   <additional-query>
     <cts:collection-query xmlns:cts="http://marklogic.com/cts";>
       <cts:uri>question</cts:uri>
     </cts:collection-query>
   </additional-query>
   <operator name="sort">
     <state name="requestparam">
       <sort-order direction="ascending" type="xs:int">
  <element ns="" name="qId"/>
       </sort-order>
       <sort-order>
  <score/>
       </sort-order>
     </state>
   </operator>
 </options>;

let $search := '(qAuthoringState:"Approved" OR qAuthoringState:"Warning") AND 
(qAudiencePoolGroup:(qApName:"Internal Medicine Audience Pool" AND qApRelevance 
GE "1" AND qApRelevance LE "1")) AND (entry:(key:1 AND 
value:(qBankDimensions:(name:"Sub-Specialty" AND 
dimensionFacts:(name:"Cardiology"))))) AND sort:requestparam'
return
    search:search($search, $options, 1, 100)


On Mon, Jan 5, 2015 at 9:45 PM, Erik Hennum 
<[email protected]<mailto:[email protected]>> wrote:
Hi, Danny:

Can you share your query and options?


Erik Hennum

________________________________
From: 
[email protected]<mailto:[email protected]>
 
[[email protected]<mailto:[email protected]>]
 on behalf of Danny Sinang [[email protected]<mailto:[email protected]>]
Sent: Monday, January 05, 2015 1:44 PM
To: general
Subject: [MarkLogic Dev General] Search API total not equal to number of search 
results

After running this filtered query :

search:search($search, $options, 1, 100)

I got /search:response/@total = 88 despite there being only 36 search results 
returned by the query.

The content source / database being queried does not have a fragment root or 
parent.

What could I be doing wrong ?

Regards,
Danny




_______________________________________________
General mailing list
[email protected]<mailto:[email protected]>
http://developer.marklogic.com/mailman/listinfo/general




_______________________________________________
General mailing list
[email protected]<mailto:[email protected]>
http://developer.marklogic.com/mailman/listinfo/general


_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to