[Feature] Support hybrid search with rrf, weighted_score and mrr rankers
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 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.
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 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!
- Linguagem predominante
- C++
- Estrelas
- 65
- Forks
- 31
- Merge médio
- 1d 23h
- PRs com merge (30d)
- 64
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] Support writing MAP<K, BLOB> fieldsTalvez já em andamento @SteNicholas assumiu hoje. 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 35/100
apache/paimon-cpp#410 ·
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
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
apache/paimon-cpp#406 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de apache/paimon-cpp
Issues semelhantes
-
HasBacktrace Priority-Critical
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
azerothcore/azerothcore-wotlk#27921 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
yhirose/cpp-peglib#344 ·
-
bug-unconfirmed
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
shadps4-emu/shadps4-qtlauncher#453 ·
Mantenedores costumam responder em até 2 dias