[Feature] Search primary-key full-text indexes
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Start with the rejection in src/paimon/core/table/source/primary_key_sorted_index_scan.cpp and the TODO in src/paimon/core/operation/raw_file_split_read.cpp, then review dependencies #404 and #409. Use the Java-aligned PrimaryKeyFullTextScanTest, PrimaryKeyFullTextReadTest, PrimaryKeyFullTextSearchTest, PrimaryKeyFullTextBucketSearchTest, and NativePrimaryKeyFullTextIndexTest as behavioral guides. Done means primary-key full-text searches plan, rank, read, and propagate scores with the listed filter, mode, deletion, bucket, and archive cases covered.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Search before asking
- I searched in the issues and found nothing similar.
Motivation
Sub-issue of #399 (step 5: primary-key full-text index, read side).
Paimon C++ cannot search primary-key full-text indexes:
PrimaryKeySortedIndexScanrejects full-text search (src/paimon/core/table/source/primary_key_sorted_index_scan.cpp:288-290).- There is no scan, split, bucket search or read for
full-textpayloads. - Indexed scores are not propagated through the primary-key physical-position read path (the TODO in
src/paimon/core/operation/raw_file_split_read.cpp:85-89).
Java design (apache/paimon#8649, apache/paimon#8652, apache/paimon#8659, apache/paimon#8844, apache/paimon#9060, apache/paimon#9184):
- Dispatch.
FullTextSearchBuilderImplroutes to the primary-key path when the table is not a data-evolution table andpk-full-text.index.columnscovers the column. A non-partition filter on that path is rejected withPrimary-key full-text search does not support non-partition filters yet. PrimaryKeyFullTextScan:- Plan the primary-key batch scan with the partition filter, pinned to the snapshot.
- Scan the index manifest for
full-textpayloads that have source metadata and the definition's field id. All entries must beADD. - Group data splits by (partition, bucket), skipping
bucket < 0. - Keep eligible files with their aligned
DeletionFiles, and resolve current payloads withPkFullTextBucketIndexState#fromActiveDataFiles. - Emit one split per bucket.
PrimaryKeyFullTextSearchSplitholds the data split, the payload files and the uncovered data file names. Every eligible file is either covered by exactly one payload or listed as uncovered.PrimaryKeyFullTextBucketSearch(searchRankingsAsync):- For each payload, lay out its source files in order to get their row offsets.
- If a source is inactive or has deletions, the include set is the active ranges minus deleted positions. A payload whose include set is empty is skipped.
- Call
visitFullTextSearch(new FullTextSearch(column, query, limit).withIncludeRowIds(include)). - Map hits to
PrimaryKeySearchPosition(partition, bucket, fileName, rowId - offset, score), sorted by score descending, then file name, then position.
PrimaryKeyFullTextRead:- Requires
limit > 0, and supports onlyfull-text-index.search-mode = fast;full/detailthrowUnsupportedOperationException. - Searches each split asynchronously on the
global-index.thread-numexecutor, submitting from the caller thread. - Takes the global top-k with
PrimaryKeySearchRanker#topKByScore. - Returns
PrimaryKeyScoredResult. It turns into one indexed split per data file, with row ranges, scores and that file'sDeletionFile, which are read by position. - Uncovered data files are not searched in
fastmode.
- Requires
Solution
- Port
PrimaryKeyFullTextScan,PrimaryKeyFullTextSearchSplit(serializable),PrimaryKeyFullTextBucketSearchandPrimaryKeyFullTextRead. - Port the shared primitives
PrimaryKeySearchPosition,PrimaryKeySearchRanker#topKByScoreandPrimaryKeyScoredResult. Hybrid search (#407) will reuse them. - Propagate
_INDEX_SCOREthrough the primary-key positional read path. - Add primary-key dispatch to the table-level full-text builder from #404.
- Add tests aligned with Java
PrimaryKeyFullTextScanTest,PrimaryKeyFullTextReadTest,PrimaryKeyFullTextSearchTest,PrimaryKeyFullTextBucketSearchTestandNativePrimaryKeyFullTextIndexTest:- deletion vectors
- several buckets and levels
- uncovered files
- global top-k
- partition filters
- rejection of non-partition filters and non-
fastmodes - archives written by Java
Anything else?
Depends on #404 and #409.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- Ngôn ngữ chính
- C++
- Star
- 65
- Fork
- 31
- Merge trung bình
- 1 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 64
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/paimon-cpp
-
[Feature] Support writing MAP<K, BLOB> fieldsCó thể đã có người làm @SteNicholas đã nhận 1 ngày trước. Đang mởenhancement
apache/paimon-cpp#415 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
apache/paimon-cpp#409 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
apache/paimon-cpp#408 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
apache/paimon-cpp#407 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
apache/paimon-cpp#406 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của apache/paimon-cpp
Issue tương tự
-
Run CICD on any branch pushĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
ChicoState/autovalidate#195 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
petercorke/robotics-toolbox-python#709 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
doc: "How to Upgrade" release notes section is outdated since the `bitcoin` wrapper executableĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
Maintainer thường phản hồi trong vòng 1 ngày
-
E editing with a field wider than ~511 characters crashes (stack smashing in handle_decimal)Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 2 ngày