对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

执行文本查询

在本指南中,您可以学习;了解如何使用Scala驾驶员对文档运行文本查询。

您可以使用文本查询来检索在指定字段中包含术语或短语的文档。术语仅包含非空白字符。短语包含由任意数量的空格字符分隔的术语。

注意

文本查询需要在要搜索的集合字段上建立文本索引。要学习;了解如何创建索引,请参阅《使用索引优化查询》指南。

moviessample_mflix本指南中的示例使用Atlas示例数据集的 数据库中的 集合。要从Scala应用程序访问权限此集合,请创建一个连接到AtlasMongoClient 集群的 。然后,为databasecollection 变量指定以下值:

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实例的方法:

方法
说明

caseSensitive()

设置文本查询是否区分大小写。默认为false
。参数类型:Boolean

diacriticSensitive()

设置文本查询是否区分变音符号。默认为false
。参数类型:Boolean

language()

设置文本查询的语言。默认为文本索引的default_language 。如果未设立语言,则默认为"english"
。参数类型:String

以下示例对与 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 文档: