我有一个包含300,000个文档的mongo集合,我希望能够进行文本搜索,但能够根据一些用户参数更改分数。
示例:
const query = 'love me';
const userLang = 'da-dk';
MusicCollection.find(
{
$text: { $search: `"${query}"` },
},
{
fields: {
score: { $meta: 'textScore' },
},
limit: 200,
sort: {
score: { $meta: 'textScore' },
},
},
)
这是有效的,我得到所有匹配字符串'爱我',但如果我想用langCode提高艺术家的搜索分数怎么办?userLang?
我只想要优先考虑来自用户所在国家的艺术家,例如已经为搜索得分增加了20分。
是否可以在一个查询中执行此操作? :)
干杯 彼得
---更新--- 文档遵循以下模式:
{
_id: String,
artist: String,
title: String,
albumId: String,
genres: [String],
langCode: String,
description: String,
rating: Number,
}
我创建了以下索引:
MusicCollection.createIndex(
{
genres: "text",
artist: "text",
title: "text",
description: "text",
},
{
name: 'music_search',
default_language: "english",
weights: {
genres: 5,
artist: 15,
title: 20,
description: 10,
}
}
)
但我想要的是发送' da-dk'用户变量进入查询,所以所有文件都带有langCode:' da-dk'会得到更好的分数。不是说我想要首先使用da-dk的所有文档,而是将搜索分数提高20,例如