Overview
在本指南中,您可以学习如何使用 Scala 驱动程序对文档运行文本查询。
您可以使用文本查询来检索在指定字段中包含术语或短语的文档。术语只包含非空白字符。短语包含以任意数量的空白字符分隔的术语。
注意
文本查询需要在要搜索的集合字段上建立文本索引。要了解如何创建索引,请参阅 通过使用索引优化查询指南。
样本数据
本指南中的示例使用 Atlas 示例数据集中 sample_mflix 数据库中的 movies 集合。要从 Scala 应用程序访问此集合,请创建一个连接到 Atlas 集群的 MongoClient。然后,将以下值分配给 database 和 collection 变量:
val database: MongoDatabase = mongoClient.getDatabase("sample_mflix") val collection: MongoCollection[Document] = database.getCollection("movies")
要学习如何创建免费的MongoDB Atlas 集群并加载示例数据集,请参阅MongoDB 入门指南。
创建文本索引
在运行文本查询之前,必须在集合上创建文本索引。文本索引指定一个或多个 string 字段以对其进行文本搜索索引。以下示例在 movies 集合的 title 字段上创建文本索引:
val observable = collection.createIndex(Indexes.text("title")) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
按术语查询文本
要找到包含特定术语的文档,请将该术语作为 string 传递给 Filters 类的 text() 方法。
以下示例计算文档,其中 title 字段包含术语 "time":
val filterTerm = text("time") collection.countDocuments(filterTerm) .subscribe((count: Long) => println(count))
要查找包含多个术语的文档,请在搜索 string 中使用空格分隔术语。以下示例计数在 title 字段中包含术语 "time" 或术语 "machine" 的文档:
val filterMultiple = text("time machine") collection.countDocuments(filterMultiple) .subscribe((count: Long) => println(count))
按短语查询文本
要查找包含短语的文档,请在搜索 string 中将其用转义引号 (\") 围起来。
以下示例计算在 title 字段中包含词组 "time machine" 的文档数量:
val filterPhrase = text("\"time machine\"") collection.countDocuments(filterPhrase) .subscribe((count: Long) => println(count))
排除词语的查询文本
要排除包含特定术语的文档,请在搜索 string 中在该术语前加上连字符 (-)。您必须在查询中包含至少一个正面术语。
以下示例计数包含术语 "time" 但不包含术语 "machine" 的文档:
val filterExclude = text("time -machine") collection.countDocuments(filterExclude) .subscribe((count: Long) => println(count))
指定查询文本选项
您可以通过将 TextSearchOptions 对象作为第二个参数传递给 Filters.text() 来自定义文本查询行为。下表列出可以链接到 TextSearchOptions 实例的方法:
方法 | 说明 |
|---|---|
| 设置文本查询是否区分大小写。默认为 |
| 设置文本查询是否对发音符敏感。默认为 |
| 设置文本查询的语言。默认为文本索引的 |
以下示例计数在 title 字段中匹配术语 "Time" 的匹配大小写的文档:
val options = TextSearchOptions().caseSensitive(true) val filterOptions = text("Time", options) collection.countDocuments(filterOptions) .subscribe((count: Long) => println(count))
更多信息
要了解有关文本搜索的更多信息,请参阅 MongoDB Server 手册中的以下资源:
要了解有关使用 Scala 驱动程序创建索引的更多信息,请参阅使用索引优化查询指南。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: