对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

执行文本查询

在本指南中,您可以学习如何使用 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 实例的方法:

方法
说明

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))

要了解有关文本搜索的更多信息,请参阅 MongoDB Server 手册中的以下资源:

要了解有关使用 Scala 驱动程序创建索引的更多信息,请参阅使用索引优化查询指南。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: