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: [email protected]
For additional commands, e-mail: [email protected]