mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 10:40:07 +08:00
feat: add language filter to local web search queries (#8976)
* feat: add language filter to local web search queries Integrates user's language setting into search queries by applying a language filter based on the provider (Google, Bing, or others). This improves search relevance for localized results. * fix: update language filter logic in LocalSearchProvider Refactored applyLanguageFilter to use provider.id instead of provider.name for search engine identification. Adjusted filtering for Google, Bing, and Baidu, and removed default language filter for other providers. * Update LocalSearchProvider.ts
This commit is contained in:
parent
97a63ea5b2
commit
3b7a99ff52
@ -1,5 +1,6 @@
|
||||
import { loggerService } from '@logger'
|
||||
import { nanoid } from '@reduxjs/toolkit'
|
||||
import store from '@renderer/store'
|
||||
import { WebSearchState } from '@renderer/store/websearch'
|
||||
import { WebSearchProvider, WebSearchProviderResponse, WebSearchProviderResult } from '@renderer/types'
|
||||
import { createAbortPromise } from '@renderer/utils/abortController'
|
||||
@ -29,6 +30,7 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
|
||||
httpOptions?: RequestInit
|
||||
): Promise<WebSearchProviderResponse> {
|
||||
const uid = nanoid()
|
||||
const language = store.getState().settings.language
|
||||
try {
|
||||
if (!query.trim()) {
|
||||
throw new Error('Search query cannot be empty')
|
||||
@ -38,7 +40,8 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
|
||||
}
|
||||
|
||||
const cleanedQuery = query.split('\r\n')[1] ?? query
|
||||
const url = this.provider.url.replace('%s', encodeURIComponent(cleanedQuery))
|
||||
const queryWithLanguage = language ? this.applyLanguageFilter(cleanedQuery, language) : cleanedQuery
|
||||
const url = this.provider.url.replace('%s', encodeURIComponent(queryWithLanguage))
|
||||
let content: string = ''
|
||||
const promisesToRace: [Promise<string>] = [window.api.searchService.openUrlInSearchWindow(uid, url)]
|
||||
if (httpOptions?.signal) {
|
||||
@ -79,6 +82,25 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据提供的语言为查询添加语言过滤器
|
||||
* @param query 原始查询
|
||||
* @param language 语言代码 (例如: 'zh-CN', 'en-US')
|
||||
* @returns 带有语言过滤的查询
|
||||
*/
|
||||
protected applyLanguageFilter(query: string, language: string): string {
|
||||
if (this.provider.id.includes('local-google')) {
|
||||
return `${query} lang:${language.split('-')[0]}`
|
||||
}
|
||||
if (this.provider.id.includes('local-bing')) {
|
||||
return `${query} language:${language}`
|
||||
}
|
||||
if (this.provider.id.includes('local-baidu')) {
|
||||
return `${query} language:${language.split('-')[0]}`
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
protected parseValidUrls(_htmlContent: string): SearchItem[] {
|
||||
throw new Error('Not implemented')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user