Skip to content

[Feature] Support primary-key table full-text and hybrid search (read side) #567

Description

@JunRuiLee

Search before asking

  • I searched in the issues and found nothing similar.

Motivation

Paimon (Java) supports full-text search and hybrid (vector + full-text) search on primary-key tables, backed by the shared native paimon-ftindex-core engine. The Rust read side already supports primary-key vector search end-to-end; the natural next step is to read the primary-key full-text and hybrid results Java writes, so that Rust / Doris / DataFusion consumers get the same primary-key search capabilities.

Solution

Mirror the Java PK read path, reusing the already-merged PK-vector machinery and depending on paimon-ftindex-core (the same core the Java/Python bindings use), gated behind the fulltext feature:

  • Read full-text index archives via paimon-ftindex-core (draft PR feat(ftindex): read Java full-text archives via paimon-ftindex-core #563 lands the reader foundation).
  • PK full-text data layer (config options + the shared index/pk source-metadata + bucket-state reconciliation) and read path (PrimaryKeyFullTextScan / PrimaryKeyFullTextBucketSearch / PrimaryKeyFullTextRead, FAST mode), materializing rows by physical position — mirroring Java.
  • Hybrid search on primary-key tables: fuse vector + full-text routes in physical-position space via a PrimaryKeySearchRanker (RRF / weighted-score / weighted-MRR), mirroring Java HybridSearchBuilderImpl.

This tracks the same effort as #563 and its follow-ups. I have the read path (foundation → data layer → PK full-text read → PK hybrid) implemented locally and passing the full test suite; it is gated on the paimon-ftindex-core crates.io release before the PRs can be marked ready (a git-only dependency blocks cargo package).

Anything else?

Related: PK-vector read tracking (#514) and draft PR #563. Depends on apache/paimon-full-text (paimon-ftindex-core) being published to crates.io.

Willingness to contribute

  • I'm willing to submit a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions