docs(15.9): describe how semantic search works with filters and engine-side rank fusion - #552
Merged
Merged
Conversation
…e-side rank fusion search-semantic.rst still said that labels, facets and the file type, site and date conditions of advanced search make semantic search skip. In 15.9 those field-qualified conditions are split off the query and applied to the vector search as filters. List what still skips it instead: a sort order, phrases, wildcards, fuzzy terms and ranges on unqualified words (including a question ending in an ASCII "?"), negated or boosted words, conditions that cannot become a filter, allintitle:/allinurl:, condition-only and unparsable queries. Deep paging now names both boundaries: rank.fusion.window_size when Fess fuses, rank.fusion.pagination_depth when the search engine does. rank-fusion.rst documented no rank.fusion.engine.* setting. Add a section on fusing in OpenSearch: the neural-search plugin it needs, the combination and normalization techniques, per-searcher weights, rank.fusion.pagination_depth, the z_score/arithmetic_mean restriction and Fess refusing z_score with the other means, when a search falls back to fusion in Fess (a cluster that cannot run fused requests at all falls back with a WARN on each search and is fused by the engine again once the plugin is installed, without a restart; any other failed fused request affects that search only; a page past the pagination depth is logged at DEBUG each time), that rank.fusion.timeout does not bound the query embedding, and how the knn k and the total hit count grow with the pagination depth. Replace the note that said searchers run without a timeout with rank.fusion.timeout, and qualify the RRF-only note, the hit-count formula and the troubleshooting steps as applying to fusion in Fess. The ann-mode min_score note in search-semantic.rst now says the warning is logged for each such search rather than once. All seven languages, 15.9 tree only.
marevol
force-pushed
the
docs/semantic-search-engine-fusion
branch
from
September 24, 2026 11:56
d0ef272 to
a346e33
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Depends on: codelibs/fess#3484, codelibs/fess#3485, codelibs/fess#3487
The text describes Fess with the pending codelibs/fess fixes applied: a cluster that cannot run fused requests at all (unknown
hybridquery or search pipeline processor) falls back to fusion in Fess for that search with a WARN, and the next search asks the engine again, so no restart is needed once the plugin is installed;z_scorecombined withgeometric_mean/harmonic_meanis refused with an ERROR log and fused in Fess.The 15.9 pages on semantic search and rank fusion described 15.8 behaviour in two places and did not document engine-side rank fusion at all:
search-semantic.rstsaid that labels, facets and the file type, site and date conditions of advanced search make semantic search skip. In 15.9 field-qualified conditions (label:,site:,filetype:,timestamp/last_modifiedranges, including those added throughex_qandfields.*) are split off the query and applied to the vector search as filters.rank.fusion.window_size, which is the boundary when Fess fuses the results. Withrank.fusion.engine.enabled=truethe boundary isrank.fusion.pagination_depth.rank.fusion.engine.*,rank.fusion.combination.*,rank.fusion.normalization.techniqueandrank.fusion.pagination_depthappeared only in the generated properties page, andrank-fusion.rststill said searchers run without a timeout.Changes
<lang>/15.9/config/search-semantic.rstsort:or thesortparameter), phrases / wildcards / fuzzy terms / ranges on unqualified words (so a question ending in an ASCII?is skipped), negated or boosted words, conditions that cannot be separated as a filter (e.g. joined withOR),allintitle:/allinurl:, condition-only queries and unparsable queries. Geo and similar-document searches still skip it.rank.fusion.window_sizefor fusion in Fess,rank.fusion.pagination_depthfor fusion in the search engine (pages beyond it fall back to fusion in Fess).content_chunker.search.knn.kis raised to at leastrank.fusion.pagination_depthin engine mode.<lang>/15.9/config/rank-fusion.rstghcr.io/codelibs/fess-opensearchimage, not in the minimal distribution);rank.fusion.engine.enabled,rank.fusion.combination.technique,rank.fusion.normalization.technique,rank.fusion.combination.weights(name:weightpairs summing to 1.0) andrank.fusion.pagination_depth;z_scorenormalization can only be combined witharithmetic_mean(a neural-search restriction), and Fess refusesz_scorewithgeometric_mean/harmonic_mean, logs an ERROR naming both settings and fuses that search itself; the cases that fall back to fusion in Fess (as.*parameters, sort / geo / similar-document searches, pages beyond the pagination depth (a DEBUG log for each such search), invalid weights, thez_scorecombination above, and a cluster that cannot run fused requests at all - missing or too old neural-search plugin - which logs a WARN for each such search and returns to engine-side fusion by itself once the cluster can run it); any other failure of a fused request (invalid query, closed index, shard failure) affects that search only, and the next search is fused by the engine again;rank.fusion.timeoutdoes not apply, and a slow embedding provider delays the search up to the provider's own timeout; the knnkbecomesmax(content_chunker.search.knn.k, rank.fusion.pagination_depth), so withoutcontent_chunker.search.min_scorethe total hit count can cover most visible documents;rf_scoreis not added.rank.fusion.timeout; qualify the RRF-only note, the hit-count formula and the troubleshooting steps as applying to fusion in Fess.All seven languages (ja, en, de, es, fr, ko, zh-cn), 15.9 tree only. The generated
properties.rst/.pofiles are not touched.Verification
main(StructuredQuerySplitter,SemanticChunkSearcher,DefaultSearcher#isEngineFusionApplicable,RankFusionProcessor,QueryStringBuilder,fess_config.properties) and, for the fallback andz_scorebehaviour, against the two pending fixes.tools/check_headings.pyon the changed files: no mismatches.The ann-mode
content_chunker.search.min_scorenote insearch-semantic.rstnow says the warning is logged for each such search instead of once (codelibs/fess#3487).