搜索逻辑修复
This commit is contained in:
parent
dba148a3f9
commit
9892439083
11
README.md
11
README.md
|
|
@ -1234,12 +1234,11 @@ curl -X GET "http://127.0.0.1:8000/api/test/pron/start?count=5&lang=fr-FR" \
|
||||||
|
|
||||||
### 15. 部署说明
|
### 15. 部署说明
|
||||||
|
|
||||||
1. 安装依赖: `pip install -r requirements.txt`
|
1. 安装依赖:`uv pip install -r requirements.txt`(或使用 `pip install -r requirements.txt`)
|
||||||
2. 配置数据库连接 (settings.py)
|
2. 配置环境:在项目根目录准备 `.env`,写入数据库、Redis、邮件、翻译等密钥(字段参考 `settings.Settings`)
|
||||||
3. 配置百度翻译API密钥 (BAIDU_APPID, BAIDU_APPKEY)
|
3. 确保 MySQL 与 Redis 服务已启动并与 `.env` 中的连接信息匹配
|
||||||
4. 启动Redis服务
|
4. 初始化数据库(首次部署):`aerich upgrade`
|
||||||
5. 运行数据库迁移
|
5. 启动服务:`uvicorn main:app --host 0.0.0.0 --port 8000`(开发环境可加 `--reload`)
|
||||||
6. 启动服务: `python main.py`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -237,26 +237,69 @@ async def search_proverb(proverb_id: int = Form(...), user=Depends(get_current_u
|
||||||
|
|
||||||
|
|
||||||
@dict_search.post("/search/list/idiom")
|
@dict_search.post("/search/list/idiom")
|
||||||
async def search_idiom_list(query_idiom: ProverbSearchRequest, user=Depends(get_current_user)):
|
async def search_idiom_list(
|
||||||
|
query_idiom: ProverbSearchRequest,
|
||||||
|
user=Depends(get_current_user)
|
||||||
|
):
|
||||||
|
"""日语成语检索接口(带语言检测与分类逻辑)"""
|
||||||
|
|
||||||
if query_idiom.dict_language == "fr":
|
if query_idiom.dict_language == "fr":
|
||||||
raise HTTPException(status_code=400, detail="Dict language Error")
|
raise HTTPException(status_code=400, detail="Dict language Error")
|
||||||
|
|
||||||
|
# 语言检测
|
||||||
mapping_query, lang, is_kangji = await service.detect_language(text=query_idiom.query)
|
mapping_query, lang, is_kangji = await service.detect_language(text=query_idiom.query)
|
||||||
query = query_idiom.query
|
query = query_idiom.query
|
||||||
|
|
||||||
# ✅ 并发任务列表
|
# 初始化任务列表
|
||||||
tasks = [
|
tasks = []
|
||||||
|
|
||||||
|
# ✅ 分类逻辑入口
|
||||||
|
# --- 1️⃣ 日语输入 ---
|
||||||
|
if lang == "jp":
|
||||||
|
if is_kangji:
|
||||||
|
# 有汉字的日语词 → 进行 text + search_text 双字段匹配
|
||||||
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
query=query,
|
query=query,
|
||||||
lang=lang,
|
lang="jp",
|
||||||
|
model=IdiomJp,
|
||||||
|
search_field="text",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
tasks.append(
|
||||||
|
service.suggest_proverb(
|
||||||
|
query=query,
|
||||||
|
lang="jp",
|
||||||
model=IdiomJp,
|
model=IdiomJp,
|
||||||
search_field="search_text",
|
search_field="search_text",
|
||||||
target_field="text",
|
target_field="text",
|
||||||
)
|
)
|
||||||
]
|
)
|
||||||
|
else:
|
||||||
|
# 平假名或片假名纯日文
|
||||||
|
tasks.append(
|
||||||
|
service.suggest_proverb(
|
||||||
|
query=query,
|
||||||
|
lang="jp",
|
||||||
|
model=IdiomJp,
|
||||||
|
search_field="search_text",
|
||||||
|
target_field="text",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if lang == "zh" and is_kangji:
|
# --- 2️⃣ 中文输入 ---
|
||||||
# jp_query = all_in_kana(text=query_idiom.query)
|
elif lang == "zh":
|
||||||
|
tasks.append(
|
||||||
|
service.suggest_proverb(
|
||||||
|
query=query,
|
||||||
|
lang="zh",
|
||||||
|
model=IdiomJp,
|
||||||
|
search_field="search_text",
|
||||||
|
target_field="text",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# 若输入为汉字,可能存在对应的日语原型(mapping_query)
|
||||||
|
if is_kangji and mapping_query:
|
||||||
tasks.append(
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
query=mapping_query,
|
query=mapping_query,
|
||||||
|
|
@ -266,15 +309,33 @@ async def search_idiom_list(query_idiom: ProverbSearchRequest, user=Depends(get_
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# ✅ 并发执行(返回结果顺序与任务顺序一致)
|
# --- 3️⃣ 其他语言(默认回退) ---
|
||||||
|
else:
|
||||||
|
tasks.append(
|
||||||
|
service.suggest_proverb(
|
||||||
|
query=query,
|
||||||
|
lang="jp",
|
||||||
|
model=IdiomJp,
|
||||||
|
search_field="search_text",
|
||||||
|
target_field="text",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# ✅ 并发执行任务
|
||||||
results = await asyncio.gather(*tasks)
|
results = await asyncio.gather(*tasks)
|
||||||
|
|
||||||
# ✅ 合并结果
|
# ✅ 结果合并
|
||||||
result = results[0]
|
if not results:
|
||||||
if len(results) > 1:
|
return {"list": []}
|
||||||
result[:0] = results[1] # 将中文映射查询结果插到最前面
|
|
||||||
|
|
||||||
return {"list": result}
|
merged = []
|
||||||
|
for res in results:
|
||||||
|
merged.extend(res)
|
||||||
|
|
||||||
|
# ✅ 去重(如果你希望返回唯一成语)
|
||||||
|
unique_list = {item["text"]: item for item in merged}.values()
|
||||||
|
|
||||||
|
return {"list": list(unique_list)}
|
||||||
|
|
||||||
|
|
||||||
@dict_search.post("/search/idiom")
|
@dict_search.post("/search/idiom")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue