我们目前遇到的问题涉及使用mongo数据库填充特定的自动完成下拉列表。
mongo实体看起来像这样:
db.testscore.insert({
name: "demolition",
alias: ["explosion", "detonation"],
frontPartialName: ["demolitio", "demoliti", "demolit", "demoli", "demol", "demo", "dem"],
frontPartialAlias: [ "explosio", "explosi", "explos", "explo", "expl", "exp", "detonatio", "detonati", "detonat", "detona",...<insert more data here>...det],
partialName: ["emo", "mol", "oli"....<insert more data here>..."emolition", "molition"],
partialAlias: ["xpl", "plos"...<insert more data here>...,"eton", "toni"]
});
非常重要:后端应按以下顺序返回以下结果(如果存在)
我们做了什么:
1。)创建了一个文本索引:
db.testscore.ensureIndex({
name: "text",
alias: "text",
frontPartialName: "text",
frontPartialAlias: "text",
partialName: "text",
partialAlias: "text"
}, {
weights: {
name: 243,
alias: 81,
frontPartialName: 27,
frontPartialAlias: 9,
partialName: 3,
partialAlias: 1
},
name: "searchIndex"
});
2。)使用用户输入执行文本搜索并按分数
对其进行排序db.testscore.find({
$text: {
$search: "<insert input here>"
}
}, {
score: { $meta: "textScore"},
originalName: 1,
originalAlias: 1
}).sort({
score: { $meta: "textScore"}
});
有没有更好的方法来解决这类问题?我们的数据库目前包含500万条记录,预计会增长, 索引占用太多空间,几乎不适合内存。我已经读过mongo依赖它来更快地搜索(否则会发生一些分页)。
如果我们无法使用mongo执行此操作,我们最终可能会使用正确的全文数据库。