前比方说,我有一个蒙戈集合与text index
在itemName
场与这3个文件:
{
_id: ...,
itemName: 'Mashed carrots with big carrot pieces',
price: 1.29
},
{
_id: ...,
itemName: 'Carrot juice',
price: 0.79
},
{
_id: ...,
itemName: 'Apple juice',
price: 1.49
}
然后我Exec中查询,像这样:
db.items.find({ $text: { $search: 'Car' } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
如何强制蒙戈以与“汽车”(不区分大小写)开始返回文件之前返回任何其他文档还包含“汽车”一些在itemName
字符串中哪里?
所以我要检索的文档按以下顺序:
[
{..., itemName: 'Carrot Juice', ...},
{..., itemName: 'Mashed carrots with big carrot pieces', ...}
]
当然,这是指在一个搜索功能,不仅可以使用,所以它非常有意义,显示项目开始与用户之前显示任何其他项目之前他的搜索字符串。
到目前为止我使用的是标准正则表达式,但是这里的性能当然要差很多! +因为我必须搜索不区分大小写,根据文档,正常的正则表达式根本不使用任何索引?!
编辑:
而且,有时$text
行为是非常奇怪的。 例如,我有大约10-15件商品,其中itemName
以“Zwiebel”开头。 该查询
db.items.find({ $text: { $search: "Zwiebel" }, supplier_id: 'iNTJHEf5YgBPicTrJ' }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
的作品就像一个魅力并返回所有这些文件,而这个查询
db.items.find({ $text: { $search: "Zwie" }, supplier_id: 'iNTJHEf5YgBPicTrJ' }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
不返回任何!只有在$search
中将“Zwiebel”更改为“Zwie”。
我真的不明白这怎么可能?!
最好,P
它,当你排序的textScore有什么影响? –
请检查我的编辑! :-) 谢谢! –
@PatrickDaVader看到我的编辑 – felix