mongo db用数字进行文本搜索时性能较差

时间:2018-11-10 19:17:47

标签: node.js mongodb mongoose

我有一个名为“ torrents”的收藏,包含大约320万个文档。它基本上包含了公共洪流元数据。

模式:

x-

现在的问题是,当我使用关键字进行文本搜索时,该关键字还包含需要长时间执行的搜索查询的编号。

let mongoose = require('mongoose');

let TorrentSchema = mongoose.Schema({
  infohash: {type: String, index: true, unique: true},
  title: {type: String, index: true},
  category: {type: String, default: "Unknown", index: true},
  size: {type: Number, default: 0},
  trackers: [{
    downloads: {type: Number},
    peers: {type: Number},
    seeds: {type: Number},
    tracker: {type: String}
  }],
  files: [{path: String, length: Number}],
  swarm: {
    seeders: {type: Number, default: 0, index: -1},
    leechers: {type: Number, default: 0}
  },
  imported: {type: Date, default: Date.now, index: true},
  lastmod: {type: Date, default: Date.now, index: true}
});

TorrentSchema.virtual('getFiles').set(function () {
  return this.map(res => {
    if (typeof res === "string") return [{path: res, length: 0}];
    return res;
  })
});

TorrentSchema.virtual('downloads').get(function () {
  let downloads = 0;
  for (let download of this.trackers) {
    downloads += download.downloads
  }
  return downloads;
});

TorrentSchema.index({title: 'text'}, { language_override: 'none' });
module.exports = mongoose.model('Torrent', TorrentSchema);

现在的问题是。使用“ ubuntu”之类的字母进行搜索时,它的运行速度非常快。但是使用包含数字的字符串搜索时会出现问题。像“ ubuntu 18”一样,没有数字的字符串(如“ ubuntu iso”)在很短的时间内就没有用了。搜索其他一些关键字(例如“ somevideo 1080p”,“ somemovie 2”等)时,也会发生同样的事情。

您对此问题有任何解决办法吗?

1 个答案:

答案 0 :(得分:0)

看来,用相同的关键字查询几次后,查询速度似乎大大提高了。