簡介
MongoDB支持一段內(nèi)容的文本查詢钠至。為了執(zhí)行這一運(yùn)算,MongoDB使用了 text index 和 $text
運(yùn)算符胎源。需要注意的是棉钧,Views視圖不支持 text search。
例子
這一個(gè)例子將會展示如何創(chuàng)建一個(gè) text index 和如何使用它去查找 ‘coffee shops’, 在給定的只有文本字段里涕蚤。首先創(chuàng)建一個(gè) collection stores宪卿。
db.stores.insert(
[
{ _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" }
]
)
Text Index 文本索引
MongoDB 提供文本索引來支持文本查詢請求在一串內(nèi)容里,文本索引可以包含任意字段 只要它的值是一個(gè)string 或者 一個(gè) string 元素的 array万栅。
為了執(zhí)行文本查詢請求佑钾,你必須有一個(gè)文本索引在你的 collection里。一個(gè) collection 只能有一個(gè)文本查詢索引烦粒,但是那一個(gè)索引可以覆蓋多個(gè)字段休溶。
例如你可以運(yùn)行下面的代碼,可以操作文本查詢在 name 和 description 字段之上。
db.stores.createIndex( { name: "text", description: "text" } )
$text Operator
使用 $text 請求運(yùn)算符去執(zhí)行文本查詢在一個(gè) collection里通過文本索引邮偎。
直接用例子來解釋了管跺。
這個(gè)語句就是去查找所有stores包含任意關(guān)鍵詞在[‘coffee’, 'shop','java']中
db.stores.find( { $text: { $search: "java coffee shop" } } )
精準(zhǔn)短語
通過包裝他們在雙引號里
db.stores.find( { $text: { $search: "java \"coffee shop\"" } } )
排除某一項(xiàng)
在關(guān)鍵詞前加 - 符號。只查找 “java” 和 “shop”禾进,不包含 “coffee”
db.stores.find( { $text: { $search: "java shop -coffee" } } )
排序
MongoDB將會它的返還默認(rèn)是未排序的豁跑。但是文本查詢請求將會計(jì)算相關(guān)的評分對每一個(gè) document 即指定 document 與請求匹配的程度。
要想按照評分去排序泻云,你必須顯性地指出 $meta textScore字段并且根據(jù)他們來排序艇拍。
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
Text search is also available in the aggregation pipeline.
原文:https://docs.mongodb.com/manual/text-search/