我有这个模式
const productSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true },
brand: { type: String, required: true },
imageRoute: { type: String, required: true },
description: { type: String, required: true },
ingredients: { type: String, required: true },]
});
一个例子可能是:
{
name: "Sugar Free Oreo",
brand: "Oreo",
imageRoute: "/path/to/image.jpg",
description: "Yummy cookies",
ingredients: "Maltitol, Wheat Flour, High Oleic Canola and/or Palm Oil, Cocoa , Salt"
}
我的目标是:
我这样解决了第一点:
ProductModel.collection.createIndex(
{ name : 'text', brand : 'text' },
function(error, res) {...});
Product.find( { $text: { $search: req.query.search } } )
我该如何解决第二点?我尝试过:
ProductModel.collection.createIndex(
{ name : 'text', brand : 'text', ingredients: 'text' },
function(error, res) {...});
Product.find( { $text: { $search: req.query.search } } )
这样做我没有申请第一点,第二点不能正常工作。如果我搜索奥利奥(Oreo)并且排除了糖作为成分,则
Product.find( { $text: { $search: "Oreo -sugar" } } )
即使该产品成分中不含糖,该产品示例也不匹配,但其名称类似于“无糖奥利奥”。
我需要类似的东西:
ProductModel.collection.createIndex(
{ indexName: "nameOrBrandIndex", index: { name : 'text', brand : 'text' }},
{ indexName: "ingredientsIndex", index: { ingredients : 'text' }},
function(error, res) {...});
//For the first point
Product.find( { $text: { $search: req.query.search, using: nameOrBrandIndex } } )
//For the second point
Product.find( { $text: { $search: req.query.search, using: nameOrBrandIndex },
{ $text: { $search: req.query.ingredientsRestrictions, using: ingredientsIndex} } )
有什么方法可以模拟吗?
谢谢你,抱歉我的写作,英语不是我的母语