修复多关键词搜索问题

This commit is contained in:
luke 2025-05-29 14:42:16 +08:00
parent 95f9fc86fe
commit ed1fd2898c
2 changed files with 31 additions and 12 deletions

View File

@ -43,7 +43,6 @@
</div> </div>
<div id="tabContentAi" class="tab-content"> <div id="tabContentAi" class="tab-content">
<div id="llmResultContainer" class="llm-result-container"> <div id="llmResultContainer" class="llm-result-container">
<div class="llm-title">智能助手答案</div>
<div class="llm-result-content" id="llmResultContent"></div> <div class="llm-result-content" id="llmResultContent"></div>
<div class="llm-input-bar"> <div class="llm-input-bar">
<input id="llmInput" type="text" placeholder="请输入您的问题..." /> <input id="llmInput" type="text" placeholder="请输入您的问题..." />

View File

@ -286,7 +286,7 @@ document.addEventListener("DOMContentLoaded", async () => {
// 实时渲染,思考内容和正式回答分区块 // 实时渲染,思考内容和正式回答分区块
msgBox.innerHTML = msgBox.innerHTML =
(thinkStr (thinkStr
? `<div class="llm-think">模型思考过程:${thinkStr}</div>` ? `<div class="llm-think">${thinkStr}</div>`
: "") + : "") +
`<span class="assistant-label">智能助手:</span>${answerStr}`; `<span class="assistant-label">智能助手:</span>${answerStr}`;
llmResultContent.scrollTop = llmResultContent.scrollHeight; llmResultContent.scrollTop = llmResultContent.scrollHeight;
@ -405,8 +405,8 @@ document.addEventListener("DOMContentLoaded", async () => {
}); });
} }
async function fetchResults(keywords, page) { async function fetchResults(rawInput, page) {
log("执行搜索:", keywords, "page:", page); log("执行搜索:", rawInput, "page:", page);
if (!token) { if (!token) {
log("token 未初始化,跳转 login"); log("token 未初始化,跳转 login");
@ -415,9 +415,9 @@ document.addEventListener("DOMContentLoaded", async () => {
} }
currentPage = page; currentPage = page;
lastKeywords = keywords; lastKeywords = rawInput;
const keywordGroups = keywords.map(k => [k]); const keywordGroups = parseKeywordGroups(rawInput);
const requestBody = { const requestBody = {
keywordGroups, keywordGroups,
page: currentPage, page: currentPage,
@ -479,21 +479,41 @@ document.addEventListener("DOMContentLoaded", async () => {
} }
} }
function parseKeywordGroups(inputStr) {
if (typeof inputStr !== "string") return [];
return inputStr
.trim()
.split("||") // 用 || 分组(表示 OR
.map(group => {
group = group.trim();
if (group.startsWith("(") && group.endsWith(")")) {
group = group.slice(1, -1); // 去括号
}
return group.split(/\s+/).filter(Boolean); // 空格分词AND
})
.filter(g => g.length > 0);
}
function triggerSearch() { function triggerSearch() {
if (!token) { if (!token) {
log("triggerSearch 中 token 丢失,取消搜索"); log("triggerSearch 中 token 丢失,取消搜索");
return; return;
} }
const val = input.value.trim();
if (!val) return clearResults(); const raw = input?.value?.trim();
const keywords = val.split(/\s+/); if (!raw) return clearResults();
updateHistory(val);
updateHistory(raw);
// 并发触发 AnythingLLM + ES // 并发触发 AnythingLLM + ES
fetchLLMAnswer(val); fetchLLMAnswer(raw);
fetchResults(keywords, 1); fetchResults(raw, 1); // 传字符串,不是 keywords[]
} }
function bindEvents() { function bindEvents() {
log("绑定事件成功"); log("绑定事件成功");
searchBtn.addEventListener("click", triggerSearch); searchBtn.addEventListener("click", triggerSearch);