expanded_keywords = self._expand_keywords(clean_keyword)
if
not
expanded_keywords:
logger.warning(
"关键词预处理后为空,返回基础搜索结果"
)
basic_items, _ = self.basic_search(keyword, **kwargs)
for
kw
in
expanded_keywords:
items, _ = self.basic_search(kw, **kwargs)
item_id = item.get(
"item_id"
,
""
)
if
item_id
not
in
item_ids:
intent = self._classify_search_intent(clean_keyword)
"keyword_match"
: self._calculate_match_score(item, clean_keyword),
"sales"
: self._normalize_score(item.get(
"sales"
,
0
),
0
,
1000
),
"rating"
: self._normalize_score(item.get(
"rating"
,
3.0
),
1.0
,
5.0
),
"price"
: self._calculate_price_score(item, intent, user_id),
"stock"
: self._normalize_score(item.get(
"stock"
,
0
),
0
,
100
),
"user_preference"
: self._calculate_preference_score(item, user_id)
total_score =
sum
(scores[k] * self.weights[k]
for
k
in
scores)
scored_items.append({
"item"
: item,
"total_score"
: total_score})
sorted_items =
sorted
(scored_items, key=
lambda
x: x[
"total_score"
], reverse=
True
)
return
[x[
"item"
]
for
x
in
sorted_items[:
50
]]