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]
