From 878f23aa786efd817812ddc21db8ab2140398dac Mon Sep 17 00:00:00 2001 From: Shinsuke Sugaya Date: Sun, 27 Sep 2026 08:23:55 +0900 Subject: [PATCH] docs(15.9): engine-fused hybrid search pages up to pagination_depth (default 1000) A search fused in the search engine no longer hands pages past rank.fusion.pagination_depth to Fess-side fusion. It pages through at most min(rank.fusion.pagination_depth, indexer.max.result.window.size) results, and a page that starts beyond that is refused like a page past index.max_result_window. - rank-fusion.rst: default pagination_depth 1000; drop the "page past pagination_depth is fused by Fess" case; describe the paging limit, the lower-bound hit count at or above the depth, the empty page past the last fused hit, and the latency cost of a larger depth; the knn k of a fused request is content_chunker.search.knn.k; reducing the depth is listed under slow search - search-semantic.rst: knn.k is no longer raised to pagination_depth; deep pages with engine-side fusion stop at pagination_depth - properties.rst / properties.po: regenerated rank.fusion.pagination_depth row (default and description) All seven languages of the development tree. --- de/15.9/config/properties.po | 2 +- de/15.9/config/properties.rst | 4 +-- de/15.9/config/rank-fusion.rst | 39 ++++++++++++++++++--------- de/15.9/config/search-semantic.rst | 13 +++++---- en/15.9/config/properties.rst | 4 +-- en/15.9/config/rank-fusion.rst | 35 ++++++++++++++++-------- en/15.9/config/search-semantic.rst | 13 +++++---- es/15.9/config/properties.po | 2 +- es/15.9/config/properties.rst | 4 +-- es/15.9/config/rank-fusion.rst | 38 +++++++++++++++++--------- es/15.9/config/search-semantic.rst | 13 +++++---- fr/15.9/config/properties.po | 2 +- fr/15.9/config/properties.rst | 4 +-- fr/15.9/config/rank-fusion.rst | 38 +++++++++++++++++--------- fr/15.9/config/search-semantic.rst | 13 +++++---- ja/15.9/config/properties.po | 2 +- ja/15.9/config/properties.rst | 4 +-- ja/15.9/config/rank-fusion.rst | 34 +++++++++++++++-------- ja/15.9/config/search-semantic.rst | 13 +++++---- ko/15.9/config/properties.po | 2 +- ko/15.9/config/properties.rst | 4 +-- ko/15.9/config/rank-fusion.rst | 32 +++++++++++++++------- ko/15.9/config/search-semantic.rst | 13 +++++---- zh-cn/15.9/config/properties.po | 2 +- zh-cn/15.9/config/properties.rst | 4 +-- zh-cn/15.9/config/rank-fusion.rst | 33 +++++++++++++++-------- zh-cn/15.9/config/search-semantic.rst | 11 ++++---- 27 files changed, 231 insertions(+), 147 deletions(-) diff --git a/de/15.9/config/properties.po b/de/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/de/15.9/config/properties.po +++ b/de/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/de/15.9/config/properties.rst b/de/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/de/15.9/config/properties.rst +++ b/de/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/de/15.9/config/rank-fusion.rst b/de/15.9/config/rank-fusion.rst index 8dc9bb00..03a848e5 100644 --- a/de/15.9/config/rank-fusion.rst +++ b/de/15.9/config/rank-fusion.rst @@ -180,7 +180,7 @@ von |Fess|):: rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -202,8 +202,8 @@ von |Fess|):: - (leer) - Gewicht pro Sucher als kommagetrennte ``name:weight``-Paare (zum Beispiel ``default:0.7,semantic_chunk:0.3``). Jedes Gewicht muss zwischen ``0.0`` und ``1.0`` liegen, die Gewichte müssen in der Summe ``1.0`` ergeben, und jeder an der Fusion beteiligte Sucher muss genannt werden. Bei leerem Wert werden die Sucher gleich gewichtet. Ein Wert, der diese Regeln nicht erfüllt, wird mit einer ERROR-Meldung protokolliert, und diese Suche wird von |Fess| fusioniert. * - ``rank.fusion.pagination_depth`` - - ``200`` - - Wie viele Ergebnisse jeder Sucher pro Shard zur Fusion beiträgt. Der Wert begrenzt, wie tief ein Client blättern kann, sowie die Menge der fusionierten Dokumente. + - ``1000`` + - Wie viele Ergebnisse jeder Sucher pro Shard zur Fusion beiträgt. Der Wert begrenzt, wie tief ein Client blättern kann, sowie die Menge der fusionierten Dokumente: Eine in der Suchmaschine fusionierte Suche kann höchstens so viele Ergebnisse durchblättern. Der an die Suchmaschine gesendete Wert überschreitet nie ``indexer.max.result.window.size``. .. note:: @@ -219,10 +219,6 @@ In den folgenden Fällen führt die Suchmaschine die Fusion nicht durch, und sta - Eine Suche mit Angabe einer Sortierreihenfolge, eine Geolokalisierungssuche oder eine Suche nach ähnlichen Dokumenten. Diese überspringen die semantische Suche vollständig, sodass nur Ergebnisse der Schlüsselwortsuche zurückgegeben werden (siehe :doc:`search-semantic`). -- Eine Seite, bei der Startposition plus Seitengröße ``rank.fusion.pagination_depth`` überschreitet - (für jede solche Suche wird eine DEBUG-Meldung protokolliert). Die Fusion durch |Fess| wendet dann die - Grenze von ``rank.fusion.window_size`` an, sodass mit den Standardeinstellungen nur Ergebnisse - der Schlüsselwortsuche zurückgegeben werden. - Ein Wert von ``rank.fusion.combination.weights``, der die obigen Regeln nicht erfüllt - Die Normalisierung ``z_score`` in Kombination mit ``geometric_mean`` oder ``harmonic_mean`` (eine ERROR-Meldung nennt beide Einstellungen) @@ -244,8 +240,23 @@ Beachten Sie Folgendes, wenn die Suchmaschine die Fusion durchführt. ``content_chunker.embedding.ollama.timeout``). - ``rank.fusion.window_size`` und ``rank.fusion.threads`` werden nur verwendet, wenn |Fess| die Fusion durchführt. -- Das ``k`` der knn-Abfrage des semantischen Suchers (die Anzahl der Nachbarn pro Shard) wird zum - größeren der Werte ``content_chunker.search.knn.k`` und ``rank.fusion.pagination_depth``. Eine +- Eine fusionierte Suche kann höchstens ``rank.fusion.pagination_depth`` Ergebnisse durchblättern, + weil die Suchmaschine nur die ersten ``rank.fusion.pagination_depth`` Ergebnisse jedes Suchers pro + Shard fusioniert. Seitenanzahl, Link zur nächsten Seite und Seitennummern enden dort, und eine + Seite, die dahinter beginnt, wird mit demselben Fehler abgelehnt wie bei jeder anderen Suche eine + Seite jenseits von ``index.max_result_window``. Eine Seite, die nach dem letzten fusionierten + Ergebnis, aber innerhalb dieser Grenze beginnt (zum Beispiel über einen veralteten Link), wird + leer zurückgegeben. Suchen, die nicht in der Suchmaschine fusioniert werden, lassen sich wie + bisher bis ``index.max_result_window`` durchblättern. +- Die Gesamttrefferzahl ist exakt, solange sie unter ``rank.fusion.pagination_depth`` liegt. Ab + diesem Wert kann die Suchmaschine weniger Treffer zählen, als tatsächlich übereinstimmen; die + Zahl wird daher als Untergrenze gemeldet (in der Such-API ist ``record_count_relation`` dann + ``GREATER_THAN_OR_EQUAL_TO``). +- Ein höherer Wert für ``rank.fusion.pagination_depth`` erlaubt tieferes Blättern, aber jede + fusionierte Suche sammelt so viele Ergebnisse pro Sucher und Shard; das verlangsamt jede Suche, + nicht nur tiefe Seiten. +- Das ``k`` der knn-Abfrage des semantischen Suchers (die Anzahl der Nachbarn pro Shard) ist + ``content_chunker.search.knn.k``. Eine Vektorsuche liefert Nachbarn auch dann, wenn ihre Ähnlichkeit gering ist; ohne ``content_chunker.search.min_score`` enthält die Gesamttrefferzahl daher diese Vektortreffer, und bei einem kleinen Index kann sie die meisten für den Benutzer sichtbaren Dokumente umfassen. @@ -439,9 +450,9 @@ Suchergebnisse weichen von Erwartungen ab 5. Bei tiefen Seiten (wo ``Startposition × 2`` größer oder gleich ``rank.fusion.window_size`` ist, standardmäßig also ab dem 101. Ergebnis) wird keine Fusion durchgeführt und nur der Hauptsucher wird verwendet. Wenn Sie auf mehr Seiten fusionierte Ergebnisse wünschen, erhöhen - Sie ``rank.fusion.window_size``. Führt die Suchmaschine die Fusion durch, wird eine Seite, bei - der Startposition plus Seitengröße ``rank.fusion.pagination_depth`` überschreitet, stattdessen - von |Fess| fusioniert; erhöhen Sie daher auch ``rank.fusion.pagination_depth``. + Sie ``rank.fusion.window_size``. Führt die Suchmaschine die Fusion durch, gibt + es diese Grenze nicht: Jede Seite wird fusioniert, bis zu ``rank.fusion.pagination_depth`` + Ergebnisse (siehe :ref:`rank-fusion-engine`). Suche ist langsam ----------------- @@ -464,6 +475,10 @@ Suche ist langsam Beachten Sie, dass dadurch auch die maximale Anzahl an Ergebnissen sinkt, die pro Seite angefordert werden kann. Nach der Änderung ist ein Neustart erforderlich. +3. Führt die Suchmaschine die Fusion durch, reduzieren Sie ``rank.fusion.pagination_depth``. + Dadurch sinkt auch, wie tief fusionierte Ergebnisse durchblättert werden können. Nach der + Änderung ist ein Neustart erforderlich. + Speichermangel -------------- diff --git a/de/15.9/config/search-semantic.rst b/de/15.9/config/search-semantic.rst index 5bed6c52..a2dc6dd2 100644 --- a/de/15.9/config/search-semantic.rst +++ b/de/15.9/config/search-semantic.rst @@ -231,8 +231,8 @@ Einstellungen in system.properties * - ``content_chunker.search.knn.k`` - ``100`` - Anzahl der pro ANN-Abfrage abgerufenen Nachbarn (wird für Deep Paging automatisch - vergrößert; mindestens ``rank.fusion.pagination_depth``, wenn die Suchmaschine die Fusion - durchführt) + vergrößert, wenn |Fess| die Fusion durchführt; unverändert verwendet, wenn die Suchmaschine + die Fusion durchführt) * - ``content_chunker.search.knn.param.ef_search`` - (nicht gesetzt) - Der Parameter ``ef_search`` für ANN-Abfragen @@ -625,15 +625,14 @@ Einschränkungen - Sie wird ebenfalls übersprungen, wenn sie mit der Geolokalisierungssuche (einem Geo-Filter) oder der Suche nach ähnlichen Dokumenten kombiniert wird. -- Auf tiefen Ergebnisseiten wird Rank Fusion selbst deaktiviert. +- Wie tiefe Ergebnisseiten behandelt werden, hängt davon ab, wo die Fusion stattfindet. - Führt |Fess| die Fusion durch (Standard), bestimmt ``rank.fusion.window_size`` (Standard ``200``) die Grenze; standardmäßig werden alle Treffer ab dem 101. Suchergebnis nur aus der Schlüsselwortsuche geliefert. - - Führt die Suchmaschine die Fusion durch (``rank.fusion.engine.enabled=true``), ist die Grenze - ``rank.fusion.pagination_depth`` (Standard ``200``). Eine Seite, bei der Startposition plus - Seitengröße diesen Wert überschreitet, wird stattdessen von |Fess| fusioniert, und es gilt die - obige Grenze von ``rank.fusion.window_size``. + - Führt die Suchmaschine die Fusion durch (``rank.fusion.engine.enabled=true``), wird jede + Seite fusioniert, aber das Blättern endet nach ``rank.fusion.pagination_depth`` Ergebnissen + (Standard ``1000``); eine Seite dahinter kann nicht angefordert werden. Siehe :doc:`rank-fusion` für Details. - Ist der Embedding-Anbieter nicht erreichbar oder tritt ein Suchfehler auf, fällt |Fess| diff --git a/en/15.9/config/properties.rst b/en/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/en/15.9/config/properties.rst +++ b/en/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/en/15.9/config/rank-fusion.rst b/en/15.9/config/rank-fusion.rst index ff0b66e5..a7a446a7 100644 --- a/en/15.9/config/rank-fusion.rst +++ b/en/15.9/config/rank-fusion.rst @@ -175,7 +175,7 @@ The settings go in ``fess_config.properties`` (a change requires a restart of |F rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -197,8 +197,8 @@ The settings go in ``fess_config.properties`` (a change requires a restart of |F - (empty) - Weight per searcher, as comma-separated ``name:weight`` pairs (for example ``default:0.7,semantic_chunk:0.3``). Each weight must be between ``0.0`` and ``1.0``, the weights must sum to ``1.0``, and every searcher taking part in the fusion must be named. Empty weights the searchers equally. A value that does not meet these rules is reported with an ERROR log, and that search is fused by |Fess|. * - ``rank.fusion.pagination_depth`` - - ``200`` - - How many results each searcher contributes to the fusion per shard. It bounds how deep a client can page and the set of documents that are fused. + - ``1000`` + - How many results each searcher contributes to the fusion per shard. It bounds how deep a client can page and the set of documents that are fused: a search fused in the search engine pages through at most this many results. The value sent to the search engine never exceeds ``indexer.max.result.window.size``. .. note:: @@ -212,9 +212,6 @@ instead. - A search that includes advanced search parameters (``as.*``) - A search that specifies a sort order, a geolocation search or a similar-document search. These skip semantic search altogether, so the results are keyword-only (see :doc:`search-semantic`). -- A page whose start position plus page size exceeds ``rank.fusion.pagination_depth`` (a DEBUG log - is written for each such search). Fusion in |Fess| then applies the ``rank.fusion.window_size`` - boundary, so with the default settings the results are keyword-only. - A ``rank.fusion.combination.weights`` value that does not meet the rules above - ``z_score`` normalization combined with ``geometric_mean`` or ``harmonic_mean`` (an ERROR log names both settings) @@ -235,8 +232,20 @@ Keep the following in mind when the search engine performs the fusion. provider's own timeout (for example ``content_chunker.embedding.ollama.timeout``). - ``rank.fusion.window_size`` and ``rank.fusion.threads`` are used only when |Fess| performs the fusion. -- The ``k`` of the semantic searcher's knn query (the number of neighbors per shard) becomes the - larger of ``content_chunker.search.knn.k`` and ``rank.fusion.pagination_depth``. A vector search +- A fused search pages through at most ``rank.fusion.pagination_depth`` results, because the + search engine fuses only the top ``rank.fusion.pagination_depth`` results of each searcher per + shard. The page count, the next-page link and the page numbers stop there, and a page that + starts beyond it is refused with the same error as a page beyond ``index.max_result_window`` in + any other search. A page that starts after the last fused result but within that limit (for + example, from an outdated link) is returned empty. Searches that are not fused in the search + engine page up to ``index.max_result_window`` as before. +- The total hit count is exact while it is below ``rank.fusion.pagination_depth``. At or above it, + the search engine can count fewer hits than actually match, so the count is reported as a lower + bound (in the search API, ``record_count_relation`` is ``GREATER_THAN_OR_EQUAL_TO``). +- Raising ``rank.fusion.pagination_depth`` lets users page deeper, but every fused search collects + that many results per searcher and shard, so it makes every search slower, not only deep pages. +- The ``k`` of the semantic searcher's knn query (the number of neighbors per shard) is + ``content_chunker.search.knn.k``. A vector search returns neighbors even when their similarity is low, so without ``content_chunker.search.min_score`` the total hit count includes those vector hits, and on a small index it can cover most of the documents the user can see. Set @@ -419,9 +428,9 @@ Search Results Differ from Expectations 5. On deep pages (where ``start position × 2`` is greater than or equal to ``rank.fusion.window_size``, which by default means from the 101st result onward), fusion is not performed and only the main searcher is used. If you want fused results on more pages, - increase ``rank.fusion.window_size``. When the search engine performs the fusion, a page whose - start position plus page size exceeds ``rank.fusion.pagination_depth`` is fused by |Fess| - instead, so increase ``rank.fusion.pagination_depth`` as well. + increase ``rank.fusion.window_size``. This boundary does not exist when the search + engine performs the fusion: every page is fused, up to ``rank.fusion.pagination_depth`` + results (see :ref:`rank-fusion-engine`). Slow Search ----------- @@ -444,6 +453,10 @@ Slow Search Note that this also lowers the maximum number of results that can be requested per page. A restart is required after changing these settings. +3. When the search engine performs the fusion, reduce ``rank.fusion.pagination_depth``. This + also lowers how deep users can page through fused results. A restart is required after + changing it. + Out of Memory ------------- diff --git a/en/15.9/config/search-semantic.rst b/en/15.9/config/search-semantic.rst index 8e313da9..2f5ecb9c 100644 --- a/en/15.9/config/search-semantic.rst +++ b/en/15.9/config/search-semantic.rst @@ -221,8 +221,8 @@ system.properties Settings requires recreating the index) * - ``content_chunker.search.knn.k`` - ``100`` - - Number of neighbors retrieved per ANN query (automatically enlarged for deep paging; at - least ``rank.fusion.pagination_depth`` when the search engine performs the fusion) + - Number of neighbors retrieved per ANN query (automatically enlarged for deep paging when + |Fess| performs the fusion; used as is when the search engine performs the fusion) * - ``content_chunker.search.knn.param.ef_search`` - (unset) - The ``ef_search`` parameter for ANN queries @@ -589,15 +589,14 @@ Limitations - It is also skipped when combined with geolocation search (a geo filter) or similar-document search. -- On deep result pages, Rank Fusion itself is disabled. +- How deep result pages are handled depends on where the fusion is performed. - When |Fess| performs the fusion (the default), the boundary is determined by ``rank.fusion.window_size`` (default ``200``); by default everything from result 101 onward is keyword-only. - - When the search engine performs the fusion (``rank.fusion.engine.enabled=true``), the - boundary is ``rank.fusion.pagination_depth`` (default ``200``). A page whose start position - plus page size exceeds it is fused by |Fess| instead, and the ``rank.fusion.window_size`` - boundary above applies. + - When the search engine performs the fusion (``rank.fusion.engine.enabled=true``), every + page is fused, but paging stops at ``rank.fusion.pagination_depth`` results (default + ``1000``); a page beyond that cannot be requested. See :doc:`rank-fusion` for details. - If the embedding provider is unreachable or a search error occurs, |Fess| automatically falls diff --git a/es/15.9/config/properties.po b/es/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/es/15.9/config/properties.po +++ b/es/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/es/15.9/config/properties.rst b/es/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/es/15.9/config/properties.rst +++ b/es/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/es/15.9/config/rank-fusion.rst b/es/15.9/config/rank-fusion.rst index 1536ca3e..2f28c3a7 100644 --- a/es/15.9/config/rank-fusion.rst +++ b/es/15.9/config/rank-fusion.rst @@ -179,7 +179,7 @@ Los ajustes se escriben en ``fess_config.properties`` (un cambio requiere reinic rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -201,8 +201,8 @@ Los ajustes se escriben en ``fess_config.properties`` (un cambio requiere reinic - (vacío) - Peso de cada buscador, como pares ``nombre:peso`` separados por comas (por ejemplo, ``default:0.7,semantic_chunk:0.3``). Cada peso debe estar entre ``0.0`` y ``1.0``, los pesos deben sumar ``1.0`` y deben indicarse todos los buscadores que participan en la fusión. Si está vacío, los buscadores tienen el mismo peso. Un valor que no cumple estas reglas se notifica con un registro ERROR, y esa búsqueda la fusiona |Fess|. * - ``rank.fusion.pagination_depth`` - - ``200`` - - Cuántos resultados aporta cada buscador a la fusión por shard. Limita la profundidad hasta la que un cliente puede paginar y el conjunto de documentos que se fusionan. + - ``1000`` + - Cuántos resultados aporta cada buscador a la fusión por shard. Limita la profundidad hasta la que un cliente puede paginar y el conjunto de documentos que se fusionan: una búsqueda fusionada en el motor de búsqueda puede paginar como máximo esta cantidad de resultados. El valor enviado al motor de búsqueda nunca supera ``indexer.max.result.window.size``. .. note:: @@ -218,10 +218,6 @@ resultados en su lugar. - Una búsqueda que especifica un criterio de ordenación, una búsqueda por geolocalización o una búsqueda de documentos similares. Estas omiten por completo la búsqueda semántica, por lo que los resultados provienen solo de la búsqueda por palabras clave (consulte :doc:`search-semantic`). -- Una página cuya posición de inicio más el tamaño de página supera - ``rank.fusion.pagination_depth`` (se escribe un registro DEBUG en cada una de esas búsquedas). En ese caso, la - fusión en |Fess| aplica el límite de ``rank.fusion.window_size``, por lo que con los ajustes - predeterminados los resultados provienen solo de la búsqueda por palabras clave. - Un valor de ``rank.fusion.combination.weights`` que no cumple las reglas anteriores - La normalización ``z_score`` combinada con ``geometric_mean`` o ``harmonic_mean`` (un registro ERROR nombra ambas configuraciones) @@ -243,8 +239,23 @@ Tenga en cuenta lo siguiente cuando la fusión la realiza el motor de búsqueda. ``content_chunker.embedding.ollama.timeout``). - ``rank.fusion.window_size`` y ``rank.fusion.threads`` solo se utilizan cuando la fusión la realiza |Fess|. -- El ``k`` de la consulta knn del buscador semántico (el número de vecinos por shard) pasa a ser - el mayor entre ``content_chunker.search.knn.k`` y ``rank.fusion.pagination_depth``. Una búsqueda +- Una búsqueda fusionada puede paginar como máximo ``rank.fusion.pagination_depth`` resultados, + porque el motor de búsqueda solo fusiona los primeros ``rank.fusion.pagination_depth`` + resultados de cada buscador por shard. El número de páginas, el enlace a la página siguiente y + los números de página se detienen ahí, y una página que empieza más allá se rechaza con el mismo + error que, en cualquier otra búsqueda, una página más allá de ``index.max_result_window``. Una + página que empieza después del último resultado fusionado pero dentro de ese límite (por + ejemplo, desde un enlace obsoleto) se devuelve vacía. Las búsquedas que no se fusionan en el + motor de búsqueda pueden paginar hasta ``index.max_result_window``, como antes. +- El número total de resultados es exacto mientras sea inferior a + ``rank.fusion.pagination_depth``. A partir de ese valor, el motor de búsqueda puede contar menos + resultados de los que realmente coinciden, por lo que el número se informa como un límite + inferior (en la API de búsqueda, ``record_count_relation`` es ``GREATER_THAN_OR_EQUAL_TO``). +- Aumentar ``rank.fusion.pagination_depth`` permite paginar más a fondo, pero cada búsqueda + fusionada recopila esa cantidad de resultados por buscador y shard, por lo que todas las + búsquedas se vuelven más lentas, no solo las páginas profundas. +- El ``k`` de la consulta knn del buscador semántico (el número de vecinos por shard) es + ``content_chunker.search.knn.k``. Una búsqueda vectorial devuelve vecinos aunque su similitud sea baja, por lo que, sin ``content_chunker.search.min_score``, el número total de resultados incluye esos resultados vectoriales y, en un índice pequeño, puede abarcar la mayoría de los documentos que el usuario @@ -439,9 +450,8 @@ Los resultados de búsqueda difieren de lo esperado ``rank.fusion.window_size``; de forma predeterminada, a partir del resultado 101), la fusión no se realiza y solo se utiliza el buscador principal. Si desea resultados fusionados en más páginas, aumente ``rank.fusion.window_size``. Cuando la fusión la realiza el motor de - búsqueda, una página cuya posición de inicio más el tamaño de página supera - ``rank.fusion.pagination_depth`` la fusiona |Fess| en su lugar, por lo que aumente también - ``rank.fusion.pagination_depth``. + búsqueda, este límite no existe: se fusionan todas las páginas, hasta + ``rank.fusion.pagination_depth`` resultados (consulte :ref:`rank-fusion-engine`). La búsqueda es lenta -------------------- @@ -464,6 +474,10 @@ La búsqueda es lenta Tenga en cuenta que el número máximo de resultados que se pueden solicitar por página también se reduce. Tras aplicar la configuración es necesario reiniciar. +3. Cuando la fusión la realiza el motor de búsqueda, reducir ``rank.fusion.pagination_depth``. + Esto también reduce la profundidad hasta la que se pueden paginar los resultados fusionados. + Tras cambiarlo es necesario reiniciar. + Memoria insuficiente -------------------- diff --git a/es/15.9/config/search-semantic.rst b/es/15.9/config/search-semantic.rst index 45e6a19c..b6b4ae9b 100644 --- a/es/15.9/config/search-semantic.rst +++ b/es/15.9/config/search-semantic.rst @@ -232,8 +232,8 @@ Configuraciones en system.properties * - ``content_chunker.search.knn.k`` - ``100`` - Número de vecinos recuperados por consulta ANN (se amplía automáticamente para paginación - profunda; como mínimo ``rank.fusion.pagination_depth`` cuando la fusión la realiza el motor - de búsqueda) + profunda cuando la fusión la realiza |Fess|; se usa tal cual cuando la fusión la realiza el + motor de búsqueda) * - ``content_chunker.search.knn.param.ef_search`` - (sin establecer) - El parámetro ``ef_search`` para las consultas ANN @@ -626,15 +626,14 @@ Limitaciones - También se omite cuando se combina con la búsqueda por geolocalización (un filtro geo) o la búsqueda de documentos similares. -- En las páginas profundas se desactiva el propio Rank Fusion. +- El tratamiento de las páginas profundas depende de dónde se realiza la fusión. - Cuando la fusión la realiza |Fess| (el comportamiento predeterminado), el límite lo determina ``rank.fusion.window_size`` (predeterminado ``200``); con los valores predeterminados, todos los resultados a partir del número 101 provienen solo de la búsqueda por palabras clave. - - Cuando la fusión la realiza el motor de búsqueda (``rank.fusion.engine.enabled=true``), el - límite es ``rank.fusion.pagination_depth`` (predeterminado ``200``). Una página cuya posición - de inicio más el tamaño de página lo supera la fusiona |Fess| en su lugar, y se aplica el - límite de ``rank.fusion.window_size`` descrito arriba. + - Cuando la fusión la realiza el motor de búsqueda (``rank.fusion.engine.enabled=true``), se + fusionan todas las páginas, pero la paginación se detiene en ``rank.fusion.pagination_depth`` + resultados (predeterminado ``1000``); no se puede solicitar una página posterior. Consulte :doc:`rank-fusion` para más detalles. - Si el proveedor de embedding no está disponible o se produce un error de búsqueda, |Fess| diff --git a/fr/15.9/config/properties.po b/fr/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/fr/15.9/config/properties.po +++ b/fr/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/fr/15.9/config/properties.rst b/fr/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/fr/15.9/config/properties.rst +++ b/fr/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/fr/15.9/config/rank-fusion.rst b/fr/15.9/config/rank-fusion.rst index 8dffeb63..e5bc1f4c 100644 --- a/fr/15.9/config/rank-fusion.rst +++ b/fr/15.9/config/rank-fusion.rst @@ -184,7 +184,7 @@ redémarrage de |Fess|) :: rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -206,8 +206,8 @@ redémarrage de |Fess|) :: - (vide) - Poids de chaque moteur de recherche, sous forme de paires ``nom:poids`` séparées par des virgules (par exemple ``default:0.7,semantic_chunk:0.3``). Chaque poids doit être compris entre ``0.0`` et ``1.0``, la somme des poids doit valoir ``1.0``, et chaque moteur participant à la fusion doit être nommé. Si la valeur est vide, les moteurs ont tous le même poids. Une valeur qui ne respecte pas ces règles est signalée par un journal ERROR, et la recherche concernée est fusionnée par |Fess|. * - ``rank.fusion.pagination_depth`` - - ``200`` - - Nombre de résultats que chaque moteur de recherche fournit à la fusion, par shard. Cette valeur borne la profondeur de pagination accessible à un client ainsi que l'ensemble des documents fusionnés. + - ``1000`` + - Nombre de résultats que chaque moteur de recherche fournit à la fusion, par shard. Cette valeur borne la profondeur de pagination accessible à un client ainsi que l'ensemble des documents fusionnés : une recherche fusionnée côté moteur de recherche peut paginer au plus ce nombre de résultats. La valeur envoyée au moteur de recherche ne dépasse jamais ``indexer.max.result.window.size``. .. note:: @@ -223,10 +223,6 @@ qui fusionne les résultats à la place. - Une recherche qui spécifie un critère de tri, une recherche par géolocalisation ou une recherche de documents similaires. Celles-ci ignorent entièrement la recherche sémantique, de sorte que les résultats proviennent uniquement de la recherche par mots-clés (voir :doc:`search-semantic`). -- Une page dont la position de début plus la taille de page dépasse - ``rank.fusion.pagination_depth`` (un journal DEBUG est consigné pour chacune de ces recherches). La fusion par - |Fess| applique alors la limite ``rank.fusion.window_size`` : avec les réglages par défaut, les - résultats proviennent donc uniquement de la recherche par mots-clés. - Une valeur de ``rank.fusion.combination.weights`` qui ne respecte pas les règles ci-dessus - La normalisation ``z_score`` combinée avec ``geometric_mean`` ou ``harmonic_mean`` (un journal ERROR nomme les deux paramètres) @@ -248,9 +244,24 @@ Gardez les points suivants à l'esprit lorsque la fusion est effectuée côté m exemple ``content_chunker.embedding.ollama.timeout``). - ``rank.fusion.window_size`` et ``rank.fusion.threads`` ne sont utilisés que lorsque |Fess| effectue la fusion. +- Une recherche fusionnée peut paginer au plus ``rank.fusion.pagination_depth`` résultats, car + le moteur de recherche ne fusionne que les ``rank.fusion.pagination_depth`` premiers résultats de + chaque moteur, par shard. Le nombre de pages, le lien vers la page suivante et les numéros de + page s'arrêtent là, et une page qui commence au-delà est refusée avec la même erreur qu'une page + au-delà de ``index.max_result_window`` pour toute autre recherche. Une page qui commence après le + dernier résultat fusionné mais dans cette limite (par exemple depuis un lien périmé) est renvoyée + vide. Les recherches qui ne sont pas fusionnées côté moteur de recherche peuvent toujours paginer + jusqu'à ``index.max_result_window``. +- Le nombre total de résultats est exact tant qu'il reste inférieur à + ``rank.fusion.pagination_depth``. À partir de cette valeur, le moteur de recherche peut compter + moins de résultats qu'il n'y en a réellement : le nombre est donc signalé comme une borne + inférieure (dans l'API de recherche, ``record_count_relation`` vaut + ``GREATER_THAN_OR_EQUAL_TO``). +- Augmenter ``rank.fusion.pagination_depth`` permet de paginer plus loin, mais chaque recherche + fusionnée collecte ce nombre de résultats par moteur et par shard : toutes les recherches sont + donc ralenties, pas seulement les pages profondes. - Le ``k`` de la requête knn du moteur de recherche sémantique (le nombre de voisins par shard) - devient la plus grande des deux valeurs ``content_chunker.search.knn.k`` et - ``rank.fusion.pagination_depth``. Une recherche vectorielle renvoie des voisins même lorsque + est ``content_chunker.search.knn.k``. Une recherche vectorielle renvoie des voisins même lorsque leur similarité est faible : sans ``content_chunker.search.min_score``, le nombre total de résultats inclut donc ces résultats vectoriels et, sur un petit index, il peut couvrir la plupart des documents visibles par l'utilisateur. Définissez ``content_chunker.search.min_score`` pour @@ -446,9 +457,8 @@ Les résultats de recherche diffèrent des attentes ``rank.fusion.window_size``, soit à partir du 101e résultat avec les valeurs par défaut), la fusion n'est pas effectuée et seul le moteur principal est utilisé. Pour obtenir des résultats fusionnés sur davantage de pages, augmentez ``rank.fusion.window_size``. Lorsque la fusion est - effectuée côté moteur de recherche, une page dont la position de début plus la taille de page - dépasse ``rank.fusion.pagination_depth`` est fusionnée par |Fess| à la place : augmentez donc - également ``rank.fusion.pagination_depth``. + effectuée côté moteur de recherche, cette limite n'existe pas : toutes les pages sont + fusionnées, jusqu'à ``rank.fusion.pagination_depth`` résultats (voir :ref:`rank-fusion-engine`). La recherche est lente ----------------------- @@ -471,6 +481,10 @@ La recherche est lente Notez que le nombre maximum de résultats pouvant être demandés par page diminue lui aussi. Un redémarrage est nécessaire après ces modifications. +3. Lorsque la fusion est effectuée côté moteur de recherche, réduire + ``rank.fusion.pagination_depth``. La profondeur de pagination des résultats fusionnés diminue + elle aussi. Un redémarrage est nécessaire après cette modification. + Mémoire insuffisante --------------------- diff --git a/fr/15.9/config/search-semantic.rst b/fr/15.9/config/search-semantic.rst index b0c9739c..b9140418 100644 --- a/fr/15.9/config/search-semantic.rst +++ b/fr/15.9/config/search-semantic.rst @@ -236,8 +236,8 @@ Réglages dans system.properties * - ``content_chunker.search.knn.k`` - ``100`` - Nombre de voisins récupérés par requête ANN (agrandi automatiquement pour la pagination - profonde ; au moins ``rank.fusion.pagination_depth`` lorsque la fusion est effectuée côté - moteur de recherche) + profonde lorsque |Fess| effectue la fusion ; utilisé tel quel lorsque la fusion est + effectuée côté moteur de recherche) * - ``content_chunker.search.knn.param.ef_search`` - (non défini) - Le paramètre ``ef_search`` pour les requêtes ANN @@ -630,16 +630,15 @@ Limitations - Elle est également ignorée lorsqu'elle est combinée à une recherche par géolocalisation (un filtre géo) ou à une recherche de documents similaires. -- Sur les pages profondes, le Rank Fusion lui-même est désactivé. +- Le traitement des pages profondes dépend de l'endroit où la fusion est effectuée. - Lorsque |Fess| effectue la fusion (par défaut), la limite est déterminée par ``rank.fusion.window_size`` (par défaut ``200``) ; avec les valeurs par défaut, tous les résultats à partir du 101e proviennent uniquement de la recherche par mots-clés. - Lorsque la fusion est effectuée côté moteur de recherche - (``rank.fusion.engine.enabled=true``), la limite est ``rank.fusion.pagination_depth`` (par - défaut ``200``). Une page dont la position de début plus la taille de page dépasse cette - valeur est fusionnée par |Fess| à la place, et la limite ``rank.fusion.window_size`` - ci-dessus s'applique. + (``rank.fusion.engine.enabled=true``), toutes les pages sont fusionnées, mais la pagination + s'arrête à ``rank.fusion.pagination_depth`` résultats (par défaut ``1000``) ; une page + au-delà ne peut pas être demandée. Voir :doc:`rank-fusion` pour plus de détails. - Si le fournisseur d'embedding est inaccessible ou qu'une erreur de recherche survient, |Fess| diff --git a/ja/15.9/config/properties.po b/ja/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/ja/15.9/config/properties.po +++ b/ja/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/ja/15.9/config/properties.rst b/ja/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/ja/15.9/config/properties.rst +++ b/ja/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/ja/15.9/config/rank-fusion.rst b/ja/15.9/config/rank-fusion.rst index 0a0a4a54..325310f0 100644 --- a/ja/15.9/config/rank-fusion.rst +++ b/ja/15.9/config/rank-fusion.rst @@ -168,7 +168,7 @@ JVMシステムプロパティ rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -190,8 +190,8 @@ JVMシステムプロパティ - (空) - サーチャーごとの重みを ``名前:重み`` のカンマ区切りで指定します(例: ``default:0.7,semantic_chunk:0.3``)。重みは ``0.0``\ 〜\ ``1.0`` で合計が ``1.0`` になる必要があり、融合に参加するすべてのサーチャーを指定する必要があります。空の場合は均等に扱われます。条件を満たさない場合はERRORログを出力し、その検索は |Fess| 側で融合されます。 * - ``rank.fusion.pagination_depth`` - - ``200`` - - 各サーチャーがシャードごとに融合へ提供する結果の件数。ページングできる深さと、融合の対象になるドキュメントの範囲を決めます。 + - ``1000`` + - 各サーチャーがシャードごとに融合へ提供する結果の件数。ページングできる深さと、融合の対象になるドキュメントの範囲を決めます。検索エンジン側で融合した検索は、最大でこの件数までページングできます。検索エンジンに送る値は ``indexer.max.result.window.size`` を超えません。 .. note:: @@ -205,9 +205,6 @@ JVMシステムプロパティ - 詳細検索のパラメーター(``as.*``)を含む検索 - ソート、位置情報検索、類似ドキュメント検索を指定した検索。これらではセマンティック検索自体が スキップされるため、キーワード検索のみの結果になります(:doc:`search-semantic` を参照)。 -- 開始位置+ページサイズが ``rank.fusion.pagination_depth`` を超えるページ(該当する検索ごとに - DEBUGログを出力します)。|Fess| 側での融合では ``rank.fusion.window_size`` の境界が適用されるため、 - 既定の設定ではキーワード検索のみの結果になります。 - ``rank.fusion.combination.weights`` が条件を満たさない場合 - ``z_score`` 正規化と ``geometric_mean`` または ``harmonic_mean`` を組み合わせた場合(両方の 設定名を示すERRORログを出力します) @@ -227,8 +224,21 @@ JVMシステムプロパティ タイムアウト(例: ``content_chunker.embedding.ollama.timeout``)まで待たされます。 - ``rank.fusion.window_size`` と ``rank.fusion.threads`` は、|Fess| 側で融合する場合にのみ 使われます。 -- セマンティックサーチャーの knn クエリの ``k``\ (シャードごとの近傍数)は、 - ``content_chunker.search.knn.k`` と ``rank.fusion.pagination_depth`` の大きい方になります。 +- 検索エンジン側で融合した検索は、最大で ``rank.fusion.pagination_depth`` 件までページング + できます。検索エンジンは各サーチャーのシャードごとの上位 ``rank.fusion.pagination_depth`` 件 + だけを融合するためです。ページ数、次ページの有無、ページ番号はこの件数で打ち切られ、これを + 超えた位置から始まるページを要求すると、ほかの検索で ``index.max_result_window`` を超えた + ページを要求した場合と同じエラーになります。この範囲内でも、融合結果の最後の件より後から + 始まるページ(古いリンクなど)は空のページになります。検索エンジン側で融合しない検索は、 + これまでどおり ``index.max_result_window`` までページングできます。 +- 総ヒット件数は ``rank.fusion.pagination_depth`` 未満であれば正確です。この値以上になると、 + 検索エンジンが実際に一致する件数より少なく数えることがあるため、下限値として扱われます + (検索APIの ``record_count_relation`` は ``GREATER_THAN_OR_EQUAL_TO`` になります)。 +- ``rank.fusion.pagination_depth`` を大きくすると深いページまで参照できますが、融合するすべての + 検索がサーチャーごと・シャードごとにその件数を収集するため、深いページに限らずすべての検索が + 遅くなります。 +- セマンティックサーチャーの knn クエリの ``k``\ (シャードごとの近傍数)は + ``content_chunker.search.knn.k`` です。 ベクトル検索は類似度が低いドキュメントも近傍として返すため、\ ``content_chunker.search.min_score`` を設定していない場合、総ヒット件数にはその分のベクトル検索のヒットが加わり、小規模な インデックスでは閲覧できるドキュメントのほとんどが件数に含まれることがあります。件数を絞る @@ -406,9 +416,8 @@ WARNログを出力したうえで、残りのサーチャーの結果だけで 5. 深いページ(``開始位置 × 2`` が ``rank.fusion.window_size`` 以上になる位置。既定では 101件目以降)では融合が行われず、メインサーチャーのみで検索されます。より多くのページで 融合結果を利用したい場合は ``rank.fusion.window_size`` を大きくしてください。検索エンジン側で - 融合する場合は、開始位置+ページサイズが ``rank.fusion.pagination_depth`` を超えるページが - |Fess| 側での融合に切り替わるため、あわせて ``rank.fusion.pagination_depth`` も大きくして - ください。 + 融合する場合はこの境界はなく、最大 ``rank.fusion.pagination_depth`` 件までのすべてのページが + 融合されます(:ref:`rank-fusion-engine` を参照)。 検索が遅い ---------- @@ -429,6 +438,9 @@ WARNログを出力したうえで、残りのサーチャーの結果だけで 1ページに要求できる最大件数も下がる点に注意してください。設定後は再起動が必要です。 +3. 検索エンジン側で融合する場合は ``rank.fusion.pagination_depth`` を減らす。融合結果を + ページングできる深さも浅くなる点に注意してください。設定後は再起動が必要です。 + メモリ不足 ---------- diff --git a/ja/15.9/config/search-semantic.rst b/ja/15.9/config/search-semantic.rst index 78fdabf5..b08a7163 100644 --- a/ja/15.9/config/search-semantic.rst +++ b/ja/15.9/config/search-semantic.rst @@ -207,8 +207,8 @@ system.properties の設定 インデックスの再作成が必要) * - ``content_chunker.search.knn.k`` - ``100`` - - ANNクエリで取得する近傍数(ページング範囲が大きい場合は自動的に拡大。検索エンジン側で - 融合する場合は ``rank.fusion.pagination_depth`` 以上になります) + - ANNクエリで取得する近傍数(|Fess| 側で融合する場合、ページング範囲が大きいときは自動的に + 拡大。検索エンジン側で融合する場合はこの値がそのまま使われます) * - ``content_chunker.search.knn.param.ef_search`` - (未設定) - ANNクエリの ``ef_search`` パラメーター @@ -562,14 +562,13 @@ exact モードと ann モード - 構文解析できないクエリ - 位置情報検索(ジオフィルタ)や類似ドキュメント検索と併用した場合もスキップされます。 -- 深いページではRank Fusion自体が無効化されます。 +- 深いページの扱いは、融合を行う場所によって異なります。 - |Fess| 側で融合する場合(既定)は、境界は ``rank.fusion.window_size``\ (デフォルト ``200``)で決まり、既定では検索結果の 101 件目以降がキーワード検索のみの結果になります。 - - 検索エンジン側で融合する場合(``rank.fusion.engine.enabled=true``)は、境界は - ``rank.fusion.pagination_depth``\ (デフォルト ``200``)です。開始位置+ページサイズがこの値を - 超えるページは |Fess| 側での融合で処理され、上記の ``rank.fusion.window_size`` の境界が - 適用されます。 + - 検索エンジン側で融合する場合(``rank.fusion.engine.enabled=true``)は、すべてのページが + 融合されますが、ページングは ``rank.fusion.pagination_depth``\ (デフォルト ``1000``)件で + 打ち切られ、それより後のページは要求できません。 詳細は :doc:`rank-fusion` を参照してください。 - 埋め込みプロバイダに接続できない場合や検索エラーが発生した場合は、自動的にキーワード検索のみの diff --git a/ko/15.9/config/properties.po b/ko/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/ko/15.9/config/properties.po +++ b/ko/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/ko/15.9/config/properties.rst b/ko/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/ko/15.9/config/properties.rst +++ b/ko/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/ko/15.9/config/rank-fusion.rst b/ko/15.9/config/rank-fusion.rst index 9ad8e6ac..b868040e 100644 --- a/ko/15.9/config/rank-fusion.rst +++ b/ko/15.9/config/rank-fusion.rst @@ -170,7 +170,7 @@ JVM 시스템 프로퍼티 rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -192,8 +192,8 @@ JVM 시스템 프로퍼티 - (비어 있음) - 검색기별 가중치를 ``이름:가중치`` 의 쉼표 구분 형식으로 지정합니다(예: ``default:0.7,semantic_chunk:0.3``). 각 가중치는 ``0.0``\ ~\ ``1.0`` 이어야 하고 합계가 ``1.0`` 이 되어야 하며, 융합에 참여하는 모든 검색기를 지정해야 합니다. 비어 있으면 균등하게 취급됩니다. 조건을 충족하지 않는 경우에는 ERROR 로그를 출력하고, 해당 검색은 |Fess| 측에서 융합됩니다. * - ``rank.fusion.pagination_depth`` - - ``200`` - - 각 검색기가 샤드별로 융합에 제공하는 결과 건수. 페이징할 수 있는 깊이와 융합 대상이 되는 문서의 범위를 결정합니다. + - ``1000`` + - 각 검색기가 샤드별로 융합에 제공하는 결과 건수. 페이징할 수 있는 깊이와 융합 대상이 되는 문서의 범위를 결정합니다. 검색 엔진 측에서 융합한 검색은 최대 이 건수까지 페이징할 수 있습니다. 검색 엔진에 보내는 값은 ``indexer.max.result.window.size`` 를 넘지 않습니다. .. note:: @@ -207,9 +207,6 @@ JVM 시스템 프로퍼티 - 상세 검색 파라미터(``as.*``)를 포함하는 검색 - 정렬, 위치 정보 검색, 유사 문서 검색을 지정한 검색. 이들에서는 시맨틱 검색 자체가 건너뛰어지므로 키워드 검색만의 결과가 됩니다(:doc:`search-semantic` 참조). -- 시작 위치+페이지 크기가 ``rank.fusion.pagination_depth`` 를 초과하는 페이지(해당 검색마다 DEBUG - 로그를 출력합니다). |Fess| 측에서의 융합에서는 ``rank.fusion.window_size`` 경계가 적용되므로, - 기본 설정에서는 키워드 검색만의 결과가 됩니다. - ``rank.fusion.combination.weights`` 가 조건을 충족하지 않는 경우 - ``z_score`` 정규화를 ``geometric_mean`` 또는 ``harmonic_mean`` 과 조합한 경우(두 설정 이름을 나타내는 ERROR 로그를 출력합니다) @@ -229,8 +226,20 @@ JVM 시스템 프로퍼티 타임아웃(예: ``content_chunker.embedding.ollama.timeout``)까지 대기하게 됩니다. - ``rank.fusion.window_size`` 와 ``rank.fusion.threads`` 는 |Fess| 측에서 융합하는 경우에만 사용됩니다. -- 시맨틱 서처의 knn 쿼리의 ``k``\ (샤드별 이웃 수)는 ``content_chunker.search.knn.k`` 와 - ``rank.fusion.pagination_depth`` 중 큰 값이 됩니다. 벡터 검색은 유사도가 낮은 문서도 이웃으로 +- 검색 엔진 측에서 융합한 검색은 최대 ``rank.fusion.pagination_depth`` 건까지 페이징할 수 + 있습니다. 검색 엔진은 각 검색기의 샤드별 상위 ``rank.fusion.pagination_depth`` 건만 융합하기 + 때문입니다. 페이지 수, 다음 페이지 여부, 페이지 번호는 이 건수에서 끝나며, 이를 넘는 위치에서 + 시작하는 페이지를 요청하면 다른 검색에서 ``index.max_result_window`` 를 넘는 페이지를 요청한 + 경우와 같은 오류가 됩니다. 이 범위 안이라도 융합 결과의 마지막 건 이후에서 시작하는 + 페이지(오래된 링크 등)는 빈 페이지가 됩니다. 검색 엔진 측에서 융합하지 않는 검색은 지금까지와 + 마찬가지로 ``index.max_result_window`` 까지 페이징할 수 있습니다. +- 총 히트 건수는 ``rank.fusion.pagination_depth`` 미만이면 정확합니다. 이 값 이상이 되면 검색 + 엔진이 실제로 일치하는 건수보다 적게 셀 수 있으므로 하한값으로 취급됩니다(검색 API의 + ``record_count_relation`` 은 ``GREATER_THAN_OR_EQUAL_TO`` 가 됩니다). +- ``rank.fusion.pagination_depth`` 를 크게 하면 더 깊은 페이지까지 볼 수 있지만, 융합하는 모든 + 검색이 검색기별·샤드별로 그 건수를 수집하므로 깊은 페이지뿐 아니라 모든 검색이 느려집니다. +- 시맨틱 서처의 knn 쿼리의 ``k``\ (샤드별 이웃 수)는 ``content_chunker.search.knn.k`` 입니다. + 벡터 검색은 유사도가 낮은 문서도 이웃으로 반환하므로, ``content_chunker.search.min_score`` 를 설정하지 않은 경우 총 히트 건수에는 그만큼의 벡터 검색 히트가 더해지며, 소규모 인덱스에서는 열람할 수 있는 문서의 대부분이 건수에 포함될 수 있습니다. 건수를 줄이려면 ``content_chunker.search.min_score`` 를 설정하세요 @@ -409,8 +418,8 @@ WARN 로그를 출력한 뒤 나머지 검색기의 결과만으로 융합이 5. 깊은 페이지(``시작 위치 × 2`` 가 ``rank.fusion.window_size`` 이상이 되는 위치. 기본값에서는 101번째 이후)에서는 융합이 수행되지 않고 메인 검색기만으로 검색됩니다. 더 많은 페이지에서 융합 결과를 사용하려면 ``rank.fusion.window_size`` 를 크게 늘려 주세요. 검색 엔진 측에서 - 융합하는 경우에는 시작 위치+페이지 크기가 ``rank.fusion.pagination_depth`` 를 초과하는 페이지가 - |Fess| 측에서의 융합으로 전환되므로, ``rank.fusion.pagination_depth`` 도 함께 크게 늘려 주세요. + 융합하는 경우에는 이 경계가 없으며, 최대 ``rank.fusion.pagination_depth`` 건까지의 모든 페이지가 + 융합됩니다(:ref:`rank-fusion-engine` 참조). 검색이 느림 ------------ @@ -431,6 +440,9 @@ WARN 로그를 출력한 뒤 나머지 검색기의 결과만으로 융합이 한 페이지에 요청할 수 있는 최대 건수도 함께 낮아진다는 점에 주의하세요. 설정 후에는 재시작이 필요합니다. +3. 검색 엔진 측에서 융합하는 경우에는 ``rank.fusion.pagination_depth`` 를 줄이기. 융합 결과를 + 페이징할 수 있는 깊이도 함께 얕아진다는 점에 주의하세요. 설정 후에는 재시작이 필요합니다. + 메모리 부족 ------------ diff --git a/ko/15.9/config/search-semantic.rst b/ko/15.9/config/search-semantic.rst index 55b6018f..ae2f1df3 100644 --- a/ko/15.9/config/search-semantic.rst +++ b/ko/15.9/config/search-semantic.rst @@ -205,8 +205,8 @@ system.properties 설정 경고와 함께 ``cosinesimil`` 로 대체됩니다(매핑에 반영됨. 변경하려면 인덱스 재작성이 필요) * - ``content_chunker.search.knn.k`` - ``100`` - - ANN 쿼리당 검색할 이웃 수(딥 페이징 시 자동으로 확대됨. 검색 엔진 측에서 융합하는 경우에는 - ``rank.fusion.pagination_depth`` 이상이 됨) + - ANN 쿼리당 검색할 이웃 수(|Fess| 측에서 융합하는 경우 딥 페이징 시 자동으로 확대됨. 검색 엔진 + 측에서 융합하는 경우에는 이 값이 그대로 사용됨) * - ``content_chunker.search.knn.param.ef_search`` - (미설정) - ANN 쿼리의 ``ef_search`` 파라미터 @@ -557,14 +557,13 @@ exact 모드와 ann 모드 - 구문 분석할 수 없는 쿼리 - 위치 정보 검색(지오 필터) 또는 유사 문서 검색과 조합된 경우에도 스킵됩니다. -- 깊은 페이지에서는 Rank Fusion 자체가 비활성화됩니다. +- 깊은 페이지의 처리는 융합을 수행하는 위치에 따라 다릅니다. - |Fess| 측에서 융합하는 경우(기본값)에는 경계가 ``rank.fusion.window_size``\ (기본값 ``200``)로 결정되며, 기본 설정에서는 검색 결과의 101번째 이후가 키워드 검색만의 결과가 됩니다. - - 검색 엔진 측에서 융합하는 경우(``rank.fusion.engine.enabled=true``)에는 경계가 - ``rank.fusion.pagination_depth``\ (기본값 ``200``)입니다. 시작 위치+페이지 크기가 이 값을 - 초과하는 페이지는 |Fess| 측의 융합으로 처리되며, 위의 ``rank.fusion.window_size`` 경계가 - 적용됩니다. + - 검색 엔진 측에서 융합하는 경우(``rank.fusion.engine.enabled=true``)에는 모든 페이지가 + 융합되지만, 페이징은 ``rank.fusion.pagination_depth``\ (기본값 ``1000``)건에서 끝나며 그 + 이후의 페이지는 요청할 수 없습니다. 자세한 내용은 :doc:`rank-fusion` 을 참조하세요. - 임베딩 프로바이더에 연결할 수 없거나 검색 오류가 발생한 경우, |Fess|\ 는 자동으로 키워드 diff --git a/zh-cn/15.9/config/properties.po b/zh-cn/15.9/config/properties.po index 2a64dfe8..bf8254de 100644 --- a/zh-cn/15.9/config/properties.po +++ b/zh-cn/15.9/config/properties.po @@ -1071,7 +1071,7 @@ msgstr "" msgid "Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally." msgstr "" -msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks." +msgid "How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size." msgstr "" msgid "ACL" diff --git a/zh-cn/15.9/config/properties.rst b/zh-cn/15.9/config/properties.rst index d81fbf36..1b10940c 100644 --- a/zh-cn/15.9/config/properties.rst +++ b/zh-cn/15.9/config/properties.rst @@ -1396,8 +1396,8 @@ Index - Weight per searcher for engine-side fusion, as name:weight pairs, e.g. default:0.7,semantic_chunk:0.3. The weights must sum to 1.0 and must name every searcher taking part. Empty weights them equally. - (empty) * - rank.fusion.pagination_depth - - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks. - - ``200`` + - How many results each searcher contributes per shard to engine-side fusion. This bounds both how deep a client can page and the set of documents the engine ranks: a fused search pages through this many results, and never more than indexer.max.result.window.size. + - ``1000`` .. list-table:: ACL :header-rows: 1 diff --git a/zh-cn/15.9/config/rank-fusion.rst b/zh-cn/15.9/config/rank-fusion.rst index 73abb2f2..3c956377 100644 --- a/zh-cn/15.9/config/rank-fusion.rst +++ b/zh-cn/15.9/config/rank-fusion.rst @@ -162,7 +162,7 @@ JVM 系统属性 rank.fusion.combination.technique=rrf rank.fusion.normalization.technique=min_max rank.fusion.combination.weights= - rank.fusion.pagination_depth=200 + rank.fusion.pagination_depth=1000 .. list-table:: :header-rows: 1 @@ -184,8 +184,8 @@ JVM 系统属性 - (空) - 各搜索器的权重,以逗号分隔的 ``名称:权重`` 对指定(例如 ``default:0.7,semantic_chunk:0.3``)。每个权重必须在 ``0.0`` 到 ``1.0`` 之间,权重之和必须为 ``1.0``\ ,并且必须指定参与融合的所有搜索器。为空时各搜索器权重相等。不满足这些规则的值会输出 ERROR 日志,该次搜索将由 |Fess| 执行融合。 * - ``rank.fusion.pagination_depth`` - - ``200`` - - 每个搜索器在每个分片上提供给融合的结果数量。它限制了客户端可以翻页的深度,以及参与融合的文档范围。 + - ``1000`` + - 每个搜索器在每个分片上提供给融合的结果数量。它限制了客户端可以翻页的深度,以及参与融合的文档范围。由搜索引擎融合的搜索最多可以翻页到这么多条结果。发送给搜索引擎的值不会超过 ``indexer.max.result.window.size``\ 。 .. note:: @@ -198,9 +198,6 @@ JVM 系统属性 - 包含高级搜索参数(``as.*``)的搜索 - 指定了排序、位置信息搜索或相似文档搜索的搜索。这些搜索会完全跳过语义搜索,因此结果仅来自 关键词搜索(请参阅 :doc:`search-semantic`\ )。 -- 起始位置加上每页大小超过 ``rank.fusion.pagination_depth`` 的页面(每次这样的搜索都会输出 DEBUG 日志)。 - 此时由 |Fess| 执行的融合会适用 ``rank.fusion.window_size`` 的分界,因此在默认配置下结果仅来自 - 关键词搜索。 - ``rank.fusion.combination.weights`` 的值不满足上述规则时 - ``z_score`` 归一化与 ``geometric_mean`` 或 ``harmonic_mean`` 组合时(会输出指明这两个设置的 ERROR 日志) @@ -217,8 +214,19 @@ JVM 系统属性 响应缓慢或无响应,搜索会一直等待,最长直到提供商自身的超时时间(例如 ``content_chunker.embedding.ollama.timeout``\ )。 - ``rank.fusion.window_size`` 和 ``rank.fusion.threads`` 仅在由 |Fess| 执行融合时使用。 -- 语义搜索器 knn 查询的 ``k``\ (每个分片的近邻数量)取 ``content_chunker.search.knn.k`` 与 - ``rank.fusion.pagination_depth`` 中较大的值。向量搜索即使在相似度较低时也会返回近邻,因此在未设置 +- 由搜索引擎融合的搜索最多只能翻页到 ``rank.fusion.pagination_depth`` 条结果,因为搜索引擎 + 只融合每个搜索器在每个分片上排名前 ``rank.fusion.pagination_depth`` 的结果。总页数、是否有 + 下一页以及页码都止于此,请求从其之后开始的页面时,会返回与其他搜索请求超过 + ``index.max_result_window`` 的页面时相同的错误。即使在此范围内,从最后一条融合结果之后开始的 + 页面(例如过时的链接)也会返回空页面。不由搜索引擎融合的搜索仍与以前一样,可以翻页到 + ``index.max_result_window``\ 。 +- 总命中数量低于 ``rank.fusion.pagination_depth`` 时是精确的。达到或超过该值时,搜索引擎统计的 + 命中数量可能少于实际匹配的数量,因此会作为下限报告(搜索 API 的 ``record_count_relation`` 为 + ``GREATER_THAN_OR_EQUAL_TO``\ )。 +- 增大 ``rank.fusion.pagination_depth`` 可以翻到更深的页面,但每次融合搜索都会按搜索器和分片收集 + 这么多条结果,因此不仅是深层页面,所有搜索都会变慢。 +- 语义搜索器 knn 查询的 ``k``\ (每个分片的近邻数量)为 ``content_chunker.search.knn.k``\ 。 + 向量搜索即使在相似度较低时也会返回近邻,因此在未设置 ``content_chunker.search.min_score`` 的情况下,总命中数量会包含这些向量搜索的命中,在小规模索引中 可能涵盖用户可见的大部分文档。若要缩小范围,请设置 ``content_chunker.search.min_score``\ (请参阅 :doc:`search-semantic`\ )。 @@ -388,9 +396,9 @@ Rank Fusion 在结合关键词搜索与语义搜索的 4. 调整 ``rank.fusion.rank_constant`` 的值 5. 在翻页较深的页面(``起始位置 × 2`` 大于等于 ``rank.fusion.window_size`` 的位置,默认情况下 为第 101 条之后)不会执行融合,仅使用主搜索器进行搜索。若希望在更多页面上获得融合结果, - 请增大 ``rank.fusion.window_size``\ 。由搜索引擎执行融合时,起始位置加上每页大小超过 - ``rank.fusion.pagination_depth`` 的页面会改由 |Fess| 执行融合,因此请同时增大 - ``rank.fusion.pagination_depth``\ 。 + 请增大 ``rank.fusion.window_size``\ 。由搜索引擎执行融合时没有此分界, + 最多 ``rank.fusion.pagination_depth`` 条结果以内的所有页面都会被融合(请参阅 + :ref:`rank-fusion-engine`\ )。 搜索缓慢 -------- @@ -411,6 +419,9 @@ Rank Fusion 在结合关键词搜索与语义搜索的 请注意,每页可请求的最大结果数量也会随之下降。设置后需要重启。 +3. 由搜索引擎执行融合时,减小 ``rank.fusion.pagination_depth``\ 。请注意,融合结果可以翻页的 + 深度也会随之变浅。设置后需要重启。 + 内存不足 -------- diff --git a/zh-cn/15.9/config/search-semantic.rst b/zh-cn/15.9/config/search-semantic.rst index 4cb154b0..f68a97ac 100644 --- a/zh-cn/15.9/config/search-semantic.rst +++ b/zh-cn/15.9/config/search-semantic.rst @@ -192,8 +192,8 @@ system.properties 配置 ``cosinesimil``\ (会反映到映射中;更改需要重新创建索引) * - ``content_chunker.search.knn.k`` - ``100`` - - 每次 ANN 查询检索的邻居数量(深分页时会自动放大;由搜索引擎执行融合时,至少为 - ``rank.fusion.pagination_depth``\ ) + - 每次 ANN 查询检索的邻居数量(由 |Fess| 执行融合时,深分页会自动放大;由搜索引擎执行 + 融合时按原值使用) * - ``content_chunker.search.knn.param.ef_search`` - (未设置) - ANN 查询的 ``ef_search`` 参数 @@ -525,13 +525,12 @@ exact 模式与 ann 模式 - 无法解析的查询 - 与地理位置搜索(地理过滤)或相似文档搜索结合使用时,同样会被跳过。 -- 在较深的页码上,Rank Fusion 本身会被禁用。 +- 较深页码的处理方式取决于在何处执行融合。 - 由 |Fess| 执行融合时(默认),分界由 ``rank.fusion.window_size``\ (默认 ``200``)决定; 默认情况下,搜索结果的第 101 条及以后仅来自关键词搜索。 - - 由搜索引擎执行融合时(``rank.fusion.engine.enabled=true``),分界为 - ``rank.fusion.pagination_depth``\ (默认 ``200``)。起始位置加上每页大小超过该值的页面改由 - |Fess| 执行融合,并适用上述 ``rank.fusion.window_size`` 的分界。 + - 由搜索引擎执行融合时(``rank.fusion.engine.enabled=true``),所有页面都会被融合,但翻页 + 止于 ``rank.fusion.pagination_depth``\ (默认 ``1000``)条结果,无法请求其后的页面。 详情请参阅 :doc:`rank-fusion`\ 。 - 如果嵌入提供商不可访问,或发生搜索错误,|Fess| 会自动回退为仅使用关键词搜索的结果(搜索本身