如果我的搜索查询是“Caramel Cake”,那么使用我现有的代码,搜索结果是[“Caramel Cake”,“Red Velvet Cake”,“Chocolate Truffle Cake”等等]。
我希望搜索结果是[“焦糖蛋糕”]
现有代码:
const products = await Product.aggregate([
{
$search : {
index: "default",
compound: {
should:[
{
autocomplete:{
query: query,
path: "prodname",
fuzzy: {maxEdits: 2, prefixLength: 2}
}
},
{
autocomplete:{
query: query,
path: "prodcategory",
fuzzy: {maxEdits: 2, prefixLength: 2}
}
}
],
minimumShouldMatch: 1,
}
},
},
{
$project: {
prodname: 1,
prodimages:1,
score: {$meta: "searchScore"},
},
},
{
$sort: {
score: -1,
},
},
{ $limit: 10},
]);
1条答案
按热度按时间v2g6jxz61#
您可以在
keywordlowercaser
分析器的帮助下执行text
运算符搜索1.为索引创建一个Analyzer,如下所示
1.确保您有一个多表单Map到您的搜索字段。
1.在$searchAggs管道中使用文本操作符
Analyzer应使用关键字tokenizer(较低的tokenfilters是您案例的选项)
更新prodname/prodcategory的Map,如下所示
如下更新你的查询过滤器,在你的should子句中使用this
请参阅https://www.mongodb.com/docs/atlas/atlas-search/analyzers/tokenizers/#std-label-keyword-tokenizer-ref
您将能够了解搜索是如何工作的