修复多关键词搜索问题

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

View File

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