Dmitry Kan created SOLR-10231:
---------------------------------

             Summary: Cursor value always different for last page with sorting 
by function
                 Key: SOLR-10231
                 URL: https://issues.apache.org/jira/browse/SOLR-10231
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
          Components: SearchComponents - other
    Affects Versions: 4.10.2
            Reporter: Dmitry Kan


Cursor based results fetching is a deal breaker for search performance.
It works extremely well when paging using sort by field(s).

Example, that works (Id is unique field in the schema):
Query:
{code}
http://solr-host:8983/solr/documents/select?q=*:*&fq=DocumentId:76581059&cursorMark=AoIGAAAAAC5TU1ItNzY1ODEwNTktMQ==&fl=DocumentId&sort=UserId+asc%2CId+desc&rows=1
{code}
Response:
{code}
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">4</int>
<lst name="params">
<str name="q">*:*</str>
<str name="fl">DocumentId</str>
<str name="cursorMark">AoIGAAAAAC5TU1ItNzY1ODEwNTktMQ==</str>
<str name="fq">DocumentId:76581059</str>
<str name="sort">UserId asc,Id desc</str>
<str name="rows">1</str>
</lst>
</lst>
<result name="response" numFound="1" start="0"/>
<str name="nextCursorMark">AoIGAAAAAC5TU1ItNzY1ODEwNTktMQ==</str>
</response>
{code}

nextCursorMark equals to cursorMark and so we know this is last page.

However, sorting by function behaves differently:
Query:
{code}
http://solr-host:8983/solr/documents/select?rows=1&q=*:*&fq=DocumentId:76581059&cursorMark=AoIFQf9yCCAAAAAuU1NSLTc2NTgxMDU5LTE=&fl=DocumentId&sort=min(ms(NOW,DynamicDateField_1),ms(NOW,DynamicDateField_12),ms(NOW,DynamicDateField_3),ms(NOW,DynamicDateField_5))%20asc,Id%20desc
{code}
Response:
{code}
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">6</int>
<lst name="params">
<str name="q">*:*</str>
<str name="fl">DocumentId</str>
<str name="cursorMark">AoIFQf9yCCAAAAAuU1NSLTc2NTgxMDU5LTE=</str>
<str name="fq">DocumentId:76581059</str>
<str name="sort">
min(ms(NOW,DynamicDateField_1),ms(NOW,DynamicDateField_12),ms(NOW,DynamicDateField_3),ms(NOW,DynamicDateField_5))
 asc,Id desc
</str>
<str name="rows">1</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="DocumentId">76581059</str>
</doc>
</result>
<str name="nextCursorMark">AoIFQf9yFyAAAAAuU1NSLTc2NTgxMDU5LTE=</str>
</response>
{code}

nextCursorMark does not equal to cursorMark, which suggests there are more 
results. Which is not true (numFound=1). And so the client goes into infinite 
loop.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to