fix: SearXNG max_results 面板配了以面板为准,未配(0)用AI传入默认值

This commit is contained in:
thzxx
2026-06-12 13:05:31 +08:00
parent d495b96f4b
commit ff786f50c5
3 changed files with 10 additions and 9 deletions
+6 -5
View File
@@ -455,7 +455,8 @@ async function handleWebSearchSearxng(
const safesearch = getSetting<number>('searxng_safesearch', 1); const safesearch = getSetting<number>('searxng_safesearch', 1);
const cfgTimeRange = getSetting<string>('searxng_time_range', ''); const cfgTimeRange = getSetting<string>('searxng_time_range', '');
const effectiveTimeRange = timeRange || cfgTimeRange; const effectiveTimeRange = timeRange || cfgTimeRange;
const cfgMaxResults = getSetting<number>('searxng_max_results', 20); const cfgMaxResults = getSetting<number>('searxng_max_results', 0);
const effectiveMax = cfgMaxResults > 0 ? cfgMaxResults : maxResults;
const format = getSetting<string>('searxng_format', 'json'); const format = getSetting<string>('searxng_format', 'json');
const isHtml = format === 'html'; const isHtml = format === 'html';
@@ -488,8 +489,8 @@ async function handleWebSearchSearxng(
if (isHtml) { if (isHtml) {
const html = await resp.text(); const html = await resp.text();
const text = htmlToText(html); const text = htmlToText(html);
const truncated = cfgMaxResults > 0 && text.length > cfgMaxResults * 500; const truncated = effectiveMax > 0 && text.length > effectiveMax * 500;
const content = truncated ? text.slice(0, cfgMaxResults * 500) + '\n...(已截断)' : text; const content = truncated ? text.slice(0, effectiveMax * 500) + '\n...(已截断)' : text;
sendLog('success', `🔍 SearXNG HTML 完成`, `${text.length} 字符`); sendLog('success', `🔍 SearXNG HTML 完成`, `${text.length} 字符`);
return { return {
success: true, success: true,
@@ -517,7 +518,7 @@ async function handleWebSearchSearxng(
unresponsive_engines?: Array<[string, string]>; unresponsive_engines?: Array<[string, string]>;
}; };
const rawResults = (data.results || []).slice(0, cfgMaxResults); const rawResults = (data.results || []).slice(0, effectiveMax);
if (rawResults.length === 0) { if (rawResults.length === 0) {
return { success: false, error: 'SearXNG 未返回任何结果,请尝试其他关键词或调整搜索引擎配置' }; return { success: false, error: 'SearXNG 未返回任何结果,请尝试其他关键词或调整搜索引擎配置' };
} }
@@ -553,7 +554,7 @@ async function handleWebSearchSearxng(
weight: 80, weight: 80,
reachable: true, reachable: true,
})), })),
cfgMaxResults, effectiveMax,
false, false,
engineStats engineStats
); );
+3 -3
View File
@@ -15,7 +15,7 @@ const DEFAULTS = {
language: 'zh-CN', language: 'zh-CN',
safesearch: 1, safesearch: 1,
time_range: '', time_range: '',
max_results: 20, max_results: 0,
auth_key: '', auth_key: '',
format: 'json', format: 'json',
}; };
@@ -61,7 +61,7 @@ function syncFormFromConfig(): void {
(document.querySelector('#searxngLanguage') as HTMLSelectElement).value = searxngConfig.language; (document.querySelector('#searxngLanguage') as HTMLSelectElement).value = searxngConfig.language;
(document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value = String(searxngConfig.safesearch); (document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value = String(searxngConfig.safesearch);
(document.querySelector('#searxngTimeRange') as HTMLSelectElement).value = searxngConfig.time_range || ''; (document.querySelector('#searxngTimeRange') as HTMLSelectElement).value = searxngConfig.time_range || '';
(document.querySelector('#searxngMaxResults') as HTMLInputElement).value = String(searxngConfig.max_results); (document.querySelector('#searxngMaxResults') as HTMLInputElement).value = searxngConfig.max_results > 0 ? String(searxngConfig.max_results) : '';
(document.querySelector('#searxngAuthKey') as HTMLInputElement).value = searxngConfig.auth_key; (document.querySelector('#searxngAuthKey') as HTMLInputElement).value = searxngConfig.auth_key;
(document.querySelector('#searxngFormat') as HTMLSelectElement).value = searxngConfig.format; (document.querySelector('#searxngFormat') as HTMLSelectElement).value = searxngConfig.format;
const toggle = document.querySelector('#toggleSearxngEnabled') as HTMLInputElement; const toggle = document.querySelector('#toggleSearxngEnabled') as HTMLInputElement;
@@ -134,7 +134,7 @@ export function initSearxngModal(): void {
searxngConfig.language = (document.querySelector('#searxngLanguage') as HTMLSelectElement).value; searxngConfig.language = (document.querySelector('#searxngLanguage') as HTMLSelectElement).value;
searxngConfig.safesearch = parseInt((document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value); searxngConfig.safesearch = parseInt((document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value);
searxngConfig.time_range = (document.querySelector('#searxngTimeRange') as HTMLSelectElement).value; searxngConfig.time_range = (document.querySelector('#searxngTimeRange') as HTMLSelectElement).value;
searxngConfig.max_results = parseInt((document.querySelector('#searxngMaxResults') as HTMLInputElement).value) || 20; searxngConfig.max_results = parseInt((document.querySelector('#searxngMaxResults') as HTMLInputElement).value) || 0;
searxngConfig.auth_key = (document.querySelector('#searxngAuthKey') as HTMLInputElement).value.trim(); searxngConfig.auth_key = (document.querySelector('#searxngAuthKey') as HTMLInputElement).value.trim();
searxngConfig.format = (document.querySelector('#searxngFormat') as HTMLSelectElement).value; searxngConfig.format = (document.querySelector('#searxngFormat') as HTMLSelectElement).value;
const db = state.get<ChatDB | null>(KEYS.DB); const db = state.get<ChatDB | null>(KEYS.DB);
+1 -1
View File
@@ -774,7 +774,7 @@
</div> </div>
<div class="setting-group"> <div class="setting-group">
<label class="setting-label">单次结果数</label> <label class="setting-label">单次结果数</label>
<input class="setting-input" id="searxngMaxResults" type="number" min="1" max="50" step="1" value="20" style="margin-bottom:0;"> <input class="setting-input" id="searxngMaxResults" type="number" min="0" max="50" step="1" placeholder="0=使用默认值" style="margin-bottom:0;">
</div> </div>
<div class="setting-group"> <div class="setting-group">
<label class="setting-label">返回格式</label> <label class="setting-label">返回格式</label>