翻译或纠错本页面
文本索引¶
概述¶
MongoDB支持在字符串内容上执行文本检索的查询操作。为了执行文本检索,MongoDB使用 text index 和 $text 操作符。
注解
Views do not support text search.
示例¶
这个示例展示了如何构建一个文本索引并且使用它在给定的唯一文本字段上查找咖啡店。
使用下列文档创建一个 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" }
]
)
文本索引¶
MongoDB提供 text indexes 支持在字符串内容上的文本检索查询。 text 索引可以包括任何值为字符串或者字符串元素数组的字段。
为了执行文本检索查询,您必须在集合上有一个 text 索引。一个集合只能拥有 ** 一个 ** 文本检索索引,但是这个索引可以覆盖多个字段。
例如,您可以在 mongo shell上运行以下命令来启动 name 和 description 字段上的文本检索。
db.stores.createIndex( { name: "text", description: "text" } )
$text 操作¶
使用 $text 查询操作符在一个有 text index 的集合上执行文本检索。
$text 将会使用空格和标点符号作为分隔符对检索字符串进行分词, 并且对检索字符串中所有的分词结果进行一个逻辑上的 OR 操作。
例如,您可以使用下面的查询语句来找到所有包含 “coffee”, “shop”, 以及 “java” 列表中任何词语的商店:
db.stores.find( { $text: { $search: "java coffee shop" } } )
精确检索¶
您也可以通过将它们包括在双引号中来进行精确检索。例如,下列的命令将会找到所有包含”java” 或者 “coffee shop” 的文档:
db.stores.find( { $text: { $search: "java \"coffee shop\"" } } )
词语排除¶
为了排除一个词语,您可以在前面加上一个 “-” 字符。例如,为了找到所有包含 “java” 或者 “shop” 但是不包含 “coffee” 的商店,使用下面的命令:
db.stores.find( { $text: { $search: "java shop -coffee" } } )