Mongodb支持對(duì)字符串字段的文本檢索。在Mongodb atlas中, 對(duì)這種文本檢索的功能進(jìn)行了增強(qiáng)。 提到文本檢索, 難免不會(huì)想到實(shí)現(xiàn)非?;鸨腁I, 聊天服務(wù)等時(shí)髦技術(shù)。mongodb提供的這種文本檢索功能+適當(dāng)?shù)乃惴▽?shí)踐,似乎可以支持這些應(yīng)用場景。
本文研究Mongodb文本檢索文檔,整理出在本地Mongo數(shù)據(jù)庫中使用文本檢索的方法和注意事項(xiàng)。
文本檢索
執(zhí)行文本檢索前,用戶需要在執(zhí)行檢索的集合建立文本索引。mongodb通過為文字內(nèi)容建立文本索引的方式支持文本檢索。文本索引可以包含任何字符串字段或字符串?dāng)?shù)組字段。一個(gè)mongodb集合中,只能有一個(gè)文本索引,但文本索引中可以包含多個(gè)字段。
mongodb的普通查詢和聚合查詢,都支持文本檢索。
應(yīng)用舉例
創(chuàng)建測試集合
創(chuàng)建一個(gè)stores集合, 包括name, description兩個(gè)字符串字段
db.stores.insertMany([
{ _id: 1, name: "Java Hut", description: "Coffee and cakes" },
{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
{ _id: 3, name: "Coffee Shop", description: "Just coffee" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
{ _id: 5, name: "Java Shopping", description: "Indonesian goods" }
])
添加文本索引
db.stores.createIndex( {name: "text", description: "text"})
精確查詢
使用雙引號(hào),將查詢文字包起來,進(jìn)行精確查詢。
db.stores.find( {$text: {$search: "\"coffee shop\""}})
當(dāng)沒有\(zhòng)轉(zhuǎn)義時(shí),查詢包含coffee或包含shop的文檔記錄。下面查詢語句中mongodb使用空格,將查詢條件的coffee和shop分開,進(jìn)行or查詢。同樣,mongodb也會(huì)對(duì)其他標(biāo)點(diǎn)符號(hào)進(jìn)行差分,拆分出多個(gè)字符串,進(jìn)行or查詢。
db.stores.find( {$text: {$search: "coffee shop"}})
排除字符串
使用符號(hào)“-”, 排除包含字符串的文檔。如查詢字符串中包含java或包含shop但不包含coffee的文檔文章來源:http://www.zghlxwxcb.cn/news/detail-831466.html
db.stores.find({$text: {$search: "java shop -coffee"}})
排序
使用文本檢索查詢時(shí),mongodb返回沒有排序的結(jié)果。但mongodb支持使用其內(nèi)部計(jì)算出來的匹配分?jǐn)?shù)來進(jìn)行排序。使用{$meta: "textScore"}獲取文檔與查詢條件中的匹配分?jǐn)?shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-831466.html
db.stores.find({
$text: {$search: "java coffee shop"}
}, {
score: {$meta: "textScore"}
}).sort( {score: {$meta: "textScore"}})
到了這里,關(guān)于Mongodb 文本檢索的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!