jackylee-ch opened a new pull request, #725:
URL: https://github.com/apache/paimon-rust/pull/725

   `collect_results` in the Lumina reader kept the top-k by score alone, so rows
   sharing a score were retained on a first-come basis and the arrival order 
comes
   from the native searcher. The same query against the same index could 
therefore
   return a different row set, and the eviction check used a bare `score >
   peek.score` rather than a total order.
   
   This is the one search backend the invariant established by #613 and #614 did
   not reach. `vector_search::ScoredRow` already breaks ties on the row id and
   routes eviction through `is_stronger_than`; `full_text::top_k` carries the 
same
   rule with a comment stating the order must be deterministic regardless of 
input
   or shard order.
   
   **Fix**: mirror the sibling comparator — `total_cmp` on the score, then the 
row
   id — and evict through it instead of `>`. Among equal scores the smallest 
row id
   now wins, in both the single-query and the batch path, which slice the same
   helper.
   
   Verified at the unit level: the three new tests feed tied scores in permuted
   orders and fail on current main. Reproducing the drift end to end needs
   `LUMINA_LIB_PATH`, which CI does not provide, so no run-time evidence is 
claimed
   here — the tests cover the selection logic directly.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to