[Feature] Support hybrid search with rrf, weighted_score and mrr rankers
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 Java HybridSearchBuilder and HybridSearchRanker design described in the issue, then inspect the existing table-level full-text search work in #404 and vector-search prerequisite. Implement the rankers, route validation, builder, and snapshot behavior described here, with tests for ranking, ties, weights, empty routes, validation, and snapshot pinning; primary-key support also depends on #410.
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 4: hybrid search).
Java Table#newHybridSearchBuilder() combines vector and full-text routes into one ranked result. It was built up over several PRs: apache/paimon#8271, apache/paimon#8288, apache/paimon#8294, apache/paimon#8324, apache/paimon#8327, apache/paimon#8336, apache/paimon#8348 and apache/paimon#8351. Paimon C++ has neither a hybrid search API nor a table-level vector search builder.
Java design:
-
Builder.
HybridSearchBuilder(HybridSearchBuilderImpl) provides:withPartitionFilter,withFilteraddVectorRoute(column, vector, limit[, weight[, options]]); the weight defaults to 1.0addFullTextRoute(field, query, limit, weight)withLimitwithRanker(String),withRrfRanker(),withWeightedScoreRanker()executeLocal()
All routes are pinned to one snapshot, and the filters are forwarded to every route. Full-text routes accept row filters since apache/paimon#9855.
-
Routes.
HybridSearchRouteis eitherVECTORorFULL_TEXT.- Weights must be finite and greater than 0.
- Full-text routes reject route options.
- The route builder rejects mixing vector and full-text settings.
-
Rankers.
HybridSearchRankernormalizes the ranker name: blank meansrrf; otherwise the name is trimmed and lower-cased.rrf: Σ weight / (60 + rank + 1). Ties are broken by score descending, then row id ascending.weighted_score: min-max normalize each route's scores to [0, 1] (all 1.0 when the range is 0), then compute Σ weight × normalized score.mrr: Σ weight / (rank + 1).- The final top-k uses a heap.
-
Primary-key tables. They rank physical positions with
PrimaryKeySearchRanker.weightedRrf,weightedScoreandweightedMrr. Mixing primary-key physical results with global row-id results is rejected.
Solution
- Port the rankers and route validation. They are self-contained and can land first with unit tests.
- Add the hybrid search builder on top of the table-level full-text search (#404) and a table-level vector search builder.
- Add tests:
- each ranker
- tie-breaking
- weights
- an empty route result
- route validation
- snapshot pinning across routes
Anything else?
- Prerequisite: a table-level vector search builder (Java
VectorSearchBuilder/ scan / read). It does not exist in Paimon C++ yet, and could be tracked separately or delivered as part of this issue. - Depends on #404. Primary-key hybrid search depends on #410.
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 35/100
apache/paimon-cpp#410 ·
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#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ự
-
[request] poppler-data/0.4.12Đang mởupstream update
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
conan-io/conan-center-index#31098 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
bug chart-audit
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/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 85/100
godotengine/godot#124120 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Component: R Type: bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/arrow#51695 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày