[Feature] Search primary-key full-text indexes
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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!
- Linguagem predominante
- C++
- Estrelas
- 65
- Forks
- 31
- Merge médio
- 1d 14h
- PRs com merge (30d)
- 60
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/paimon-cpp
-
[Feature] Warm up next data file in ConcatBatchReaderTalvez já em andamento @SteNicholas assumiu há 1 dia. Abertaenhancement
apache/paimon-cpp#419 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Feature] Derive Parquet data file stats from in-memory writer metadata instead of re-reading footerTalvez já em andamento @SteNicholas assumiu há 1 dia. Abertaenhancement
apache/paimon-cpp#417 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Feature] Support writing MAP<K, BLOB> fieldsTalvez já em andamento @SteNicholas assumiu há 3 dias. Abertaenhancement
apache/paimon-cpp#415 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
apache/paimon-cpp#409 ·
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
apache/paimon-cpp#408 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de apache/paimon-cpp
Issues semelhantes
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
iOS: hidden scale bar invalidates its intrinsic content size on every layout pass of MLNMapViewAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
maplibre/maplibre-native#4723 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
HarbourMasters/Shipwright#7320 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Make Catch2 optional when `RDK_BUILD_CPP_TESTS=OFF`Talvez já em andamento @pechersky assumiu hoje. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 2 dias