[Feature] Search primary-key full-text indexes
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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!
- Lingua principale
- C++
- Stelle
- 65
- Fork
- 31
- Merge medio
- 1g 23h
- PR unite (30g)
- 64
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/paimon-cpp
-
[Feature] Support writing MAP<K, BLOB> fieldsForse già presa @SteNicholas l’ha presa 1 giorno fa. Apertaenhancement
apache/paimon-cpp#415 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
apache/paimon-cpp#409 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
apache/paimon-cpp#408 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
apache/paimon-cpp#407 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
apache/paimon-cpp#406 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/paimon-cpp
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
sudoevolve/EUI-NEO#80 ·
-
upstream update
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
conan-io/conan-center-index#31098 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
ml-explore/mlx-c#136 ·