[Bug] Deleted rows take vector search top-k slots in data-evolution tables
メンテナーはふだん 3 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start with LiveRowGlobalIndexReader::VisitVectorSearch and compare its vector path with the full-text path that loads live rows before searching shards. The issue suggests combining VectorSearch.pre_filter with shard live rows through ReplacePreFilter, using GlobalIndexLiveRowFilter::LiveRows, or loading live rows before fan-out. Add coverage for the reproduction with three deleted nearest rows and verify that a limit of 3 returns 3 live rows when enough matches pass the filters.
索引モデルが issue の本文から書いたものです。
説明
Search before asking
- I searched in the issues and found nothing similar.
Paimon-cpp version
main at commit 50ef548ec87cc444a153fb2a03789f9be768d610, with #448 applied.
Minimal reproduce step
- Create a data-evolution table with row tracking and
deletion-vectors.enabled = true. Write 10 rows with a vector column, then build a vector global index on that column. - Delete the three rows nearest to a query vector, using deletion vectors.
- Search for that vector with
limit = 3throughGlobalIndexScan::CreateReader→VisitVectorSearch. - Pass the result to
ScanContextBuilder::SetGlobalIndexResult, then scan and read.
What doesn't meet your expectations?
The index still ranks the deleted rows, so they take all three top-k slots. The read then drops them, because deletion vectors are applied only at read time. The query returns 0 rows instead of 3.
#448 (for #403) excludes deleted rows only from full-text ranking: LiveRowGlobalIndexReader::VisitVectorSearch delegates unchanged, and live rows are loaded only before a full-text search fans out to the shards. Java filters vector search with the same live rows (apache/paimon#8459).
Expected: limit = k returns k live rows whenever at least k live rows pass the search's pre_filter and predicate.
Anything else?
Follow-up of #403 / #448.
Suggestions:
VectorSearchalready carries apre_filterover global row ids, soLiveRowGlobalIndexReader::VisitVectorSearchcan combine it with the live rows of the shard throughReplacePreFilter, reusingGlobalIndexLiveRowFilter::LiveRows, and pass the search on unchanged when the whole shard is live.- Load live rows on the visiting thread before a vector search fans out to the shards, as
LiveRowUnionGlobalIndexReaderdoes for full-text search.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- 主要言語
- C++
- スター
- 70
- フォーク
- 36
- 平均マージ
- 3日 16時間
- マージ済み PR(30日)
- 38
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/paimon-cpp のほかの issue
-
[Feature] Split the table hierarchy and materialize the store a table is served by対応中かも @lucasfang が 5 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
apache/paimon-cpp#459 ·
メンテナーはふだん 3 日以内に返信
-
[Feature] Support hybrid file-index queries with full-text search, vector search, and predicateオープンenhancement
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
apache/paimon-cpp#452 ·
メンテナーはふだん 3 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 8/100
apache/paimon-cpp#435 · コメント 2 件 ·
メンテナーはふだん 3 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
apache/paimon-cpp#410 ·
メンテナーはふだん 3 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
apache/paimon-cpp#409 ·
メンテナーはふだん 3 日以内に返信
apache/paimon-cpp の issue をすべて見る
似ている issue
-
bug IO
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MrNeRF/LichtFeld-Studio#3824 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
-
bug code-review testing tooling
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
aristocratos/btop#1945 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
boykopovar/AnyPS5#11291 ·
メンテナーはふだん 1 日以内に返信