idiom搜索逻辑修复
This commit is contained in:
parent
ba11bc3913
commit
8e36e4c209
|
|
@ -250,14 +250,12 @@ async def search_idiom_list(
|
||||||
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️⃣ 日语输入 ---
|
# --- 1️⃣ 日语输入 ---
|
||||||
if lang == "jp":
|
if lang == "jp":
|
||||||
if is_kangji:
|
if is_kangji:
|
||||||
# 有汉字的日语词 → 进行 text + search_text 双字段匹配
|
|
||||||
tasks.append(
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
query=query,
|
query=query,
|
||||||
|
|
@ -276,7 +274,6 @@ async def search_idiom_list(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# 平假名或片假名纯日文
|
|
||||||
tasks.append(
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
query=query,
|
query=query,
|
||||||
|
|
@ -287,17 +284,9 @@ async def search_idiom_list(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- 2️⃣ 中文输入 ---
|
# --- 2️⃣ 中文输入(调整优先级) ---
|
||||||
elif lang == "zh":
|
elif lang == "zh":
|
||||||
tasks.append(
|
# ✅ (1) 若存在映射:mapping_query 优先匹配日语原型(text)
|
||||||
service.suggest_proverb(
|
|
||||||
query=query,
|
|
||||||
lang="zh",
|
|
||||||
model=IdiomJp,
|
|
||||||
target_field="text",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# 若输入为汉字,可能存在对应的日语原型(mapping_query)
|
|
||||||
if is_kangji and mapping_query:
|
if is_kangji and mapping_query:
|
||||||
tasks.append(
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
|
|
@ -307,6 +296,19 @@ async def search_idiom_list(
|
||||||
search_field="text",
|
search_field="text",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ✅ (2) 然后匹配中文释义(chi_exp 或 search_text)
|
||||||
|
tasks.append(
|
||||||
|
service.suggest_proverb(
|
||||||
|
query=query,
|
||||||
|
lang="zh",
|
||||||
|
model=IdiomJp,
|
||||||
|
target_field="text",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# ✅ (3) 最后用假名匹配映射(辅助补全)
|
||||||
|
if is_kangji and mapping_query:
|
||||||
tasks.append(
|
tasks.append(
|
||||||
service.suggest_proverb(
|
service.suggest_proverb(
|
||||||
query=all_in_kana(mapping_query),
|
query=all_in_kana(mapping_query),
|
||||||
|
|
@ -328,21 +330,21 @@ async def search_idiom_list(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# ✅ 并发执行任务
|
# ✅ 并发执行任务(结果顺序与任务定义顺序一致)
|
||||||
results = await asyncio.gather(*tasks)
|
results = await asyncio.gather(*tasks)
|
||||||
|
|
||||||
# ✅ 结果合并
|
# ✅ 顺序合并 + 稳定去重
|
||||||
if not results:
|
seen = set()
|
||||||
return {"list": []}
|
ordered_unique = []
|
||||||
|
|
||||||
merged = []
|
|
||||||
for res in results:
|
for res in results:
|
||||||
merged.extend(res)
|
for item in res:
|
||||||
|
key = item.get("proverb") or item.get("text")
|
||||||
|
if key and key not in seen:
|
||||||
|
seen.add(key)
|
||||||
|
ordered_unique.append(item)
|
||||||
|
|
||||||
# ✅ 去重(如果你希望返回唯一成语)
|
return {"list": ordered_unique}
|
||||||
unique_list = {item["proverb"]: 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