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