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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions