mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-01-31 15:45:08 +08:00
top_k parameter ignored, always returned page_size results (#12753)
### What problem does this PR solve? **Backend** \rag\nlp\search.py *Before the fix* The top_k parameter was not applied to limit the total number of chunks, and the rerank model also uses the exact whole valid_idx rather than assigning valid_idx = valid_idx[:top] firstly. *After the fix* The top_k limit is applied to the total results before pagination, using a default value of top = 1024 if top_k is not modified. session.py *Before the fix:* When the frontend calls the retrieval API with `search_id`, the backend only reads `meta_data_filter` from the saved `search_config`. The `rerank_id`, `top_k`, `similarity_threshold`, and `vector_similarity_weight` parameters are only taken from the direct request body. Since the frontend doesn't pass these parameters explicitly (it only passes `search_id`), they always fall back to default values: - `similarity_threshold` = 0.0 - `vector_similarity_weight` = 0.3 - `top_k` = 1024 - `rerank_id` = "" (no rerank) This means user settings saved in the Search Settings page have no effect on actual search results. *After the fix:* When a `search_id` is provided, the backend now reads all relevant configuration from the saved `search_config`, including `rerank_id`, `top_k`, `similarity_threshold`, and `vector_similarity_weight`. Request parameters can still override these values if explicitly provided, allowing flexibility. The rerank model is now properly instantiated using the configured `rerank_id`, making the rerank feature actually work. **Frontend** \web\src\pages\next-search\search-setting.tsx *Before the fix* search-setting.tsx file, the top_k input box is only displayed when rerank is enabled (wrapped in the rerankModelDisabled condition). If the rerank switch is turned off, the top_k input field will be hidden, but the form value will remain unchanged. In other words: - When rerank is enabled, users can modify top_k (default 1024). - When rerank is disabled, top_k retains the previous value, but it's not visible on the interface. Therefore, the backend will always receive the top_k parameter; it's just that the frontend UI binds this configuration item to the rerank switch. When rerank is turned off, top_k will not automatically reset to 1024, but will retain its original value. *After the fix* On the contrary, if we switch off the button rerank model, the value top-k will be reset to 1024. By the way, If we use top-k in an individual method, rather than put it into the method retrieval, we can control it separately Now all methods valid Using rerank <img width="2378" height="1565" alt="Screenshot 2026-01-21 190206" src="https://github.com/user-attachments/assets/fa2b0df0-1334-4ca3-b169-da6c5fd59935" /> Not using rerank <img width="2596" height="1559" alt="Screenshot 2026-01-21 190229" src="https://github.com/user-attachments/assets/c5a80522-a0e1-40e7-b349-42fe86df3138" /> Before fixing they are the same ### Type of change - Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
@ -39,7 +39,7 @@ import { IKnowledge } from '@/interfaces/database/knowledge';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import { X } from 'lucide-react';
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useForm, useWatch } from 'react-hook-form';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { z } from 'zod';
|
||||
@ -226,11 +226,21 @@ const SearchSetting: React.FC<SearchSettingProps> = ({
|
||||
control: formMethods.control,
|
||||
name: 'search_config.use_rerank',
|
||||
});
|
||||
|
||||
const aiSummaryDisabled = useWatch({
|
||||
control: formMethods.control,
|
||||
name: 'search_config.summary',
|
||||
});
|
||||
|
||||
// Reset top_k to 1024 only when user actively disables rerank (from true to false)
|
||||
const prevRerankEnabled = useRef<boolean | undefined>(undefined);
|
||||
useEffect(() => {
|
||||
if (prevRerankEnabled.current === true && rerankModelDisabled === false) {
|
||||
formMethods.setValue('search_config.top_k', 1024);
|
||||
}
|
||||
prevRerankEnabled.current = rerankModelDisabled;
|
||||
}, [rerankModelDisabled, formMethods]);
|
||||
|
||||
const { updateSearch } = useUpdateSearch();
|
||||
const [formSubmitLoading, setFormSubmitLoading] = useState(false);
|
||||
const { data: systemSetting } = useFetchTenantInfo();
|
||||
|
||||
Reference in New Issue
Block a user