前比方說,我有一個蒙戈集合與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