MongoDB:具有不同多个参数的高级搜索算法

时间:2017-01-25 08:21:35

标签: mongodb search mongodb-query

我有一个包含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,例如

0 个答案:

没有答案