MongoDB文档翻译-文本搜索

英文原文地址:https://docs.mongodb.com/v3.2/text-search/。 
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。

文本搜索

概述

MongoDB支持在字符串内容上执行文本搜索。要使用文本搜索,MongoDB使用文本索引(text index)和$text操作符。

例子

下面的例子演示了如何创建文本索引,并用来查找咖啡店,只通过文本字段。

用以下文档创建一个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提供了文本索引,来支持在字符串内容上进行文本搜索。文本索引可以包含是字符串类型的任意字段,或者元素为字符串的数组。

要执行文本搜索,必须在集合中有文本索引。一个集合只能有一个文本索引,但是这个索引可以覆盖多个字段。

例如,你可以在mongoshell中运行如下命令来在namedescription字段中执行文本搜索:

db.stores.createIndex( { name: "text", description: "text" } )

$text操作符

使用$text查询操作符在有文本索引的集合上做文本搜索。

$text将会用空格和大多数标点作为分隔符对搜索字符串进行分词,然后对搜索字符串中的所有token进行逻辑或操作。

例如,可以用下面的查询来找出所有包含”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" } } )

排序

MongoDB默认返回的结果是无序的。然而,文本搜索查询会计算每个文档的相关度,表示文档对查询的匹配度高低。

要对结果按相关度查询,必须显式投影$meta textScore字段,然后对它排序:

db.stores.find(
   { $text: { $search: "java coffee shop" } },
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

在聚集管道中也可以用文本搜索。

语言支持

MongoDB支持多种语言的文本搜索。查看文本搜索语言以获取支持的语言列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值