文档菜单
文档首页
/ / /
Scala
/

文本搜索

在本页

  • 先决条件
  • 连接到 MongoDB 部署
  • 创建文本索引
  • 执行文本搜索
  • 文本评分
  • 指定文本搜索选项

MongoDB支持在文档中的字符串内容上执行文本搜索的查询操作。要执行文本搜索,MongoDB使用文本索引和$text查询运算符。有关文本搜索的更多信息,请参阅服务器手册中的文本搜索

驱动程序提供了Filters.text()辅助方法来简化文本搜索查询过滤器的创建。

您必须设置以下组件才能运行本指南中的代码示例

  • 一个test.restaurants集合,其中包含来自restaurants.json文件的文档,该文件位于文档资产GitHub

  • 以下导入语句

import org.mongodb.scala._
import org.mongodb.scala.model._

注意

本指南使用Quick Start Primer中涵盖的Observable隐式。快速入门入门.

首先,连接到MongoDB部署,然后声明并定义 MongoDatabaseMongoCollection 实例。

以下代码连接到在 localhost 上运行的独立MongoDB部署的端口 27017。然后,定义 database 变量以引用 test 数据库,并定义 collection 变量以引用 restaurants 集合

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

要了解更多关于连接到MongoDB部署的信息,请参阅 连接到MongoDB 教程。

要创建文本索引,使用 Indexes.text() 静态辅助函数来创建文本索引的规范,并将规范传递给 MongoCollection.createIndex() 方法以创建索引。

以下示例在集合中文档的 name 字段上创建文本索引

collection.createIndex(Indexes.text("name")).printResults()

要执行文本搜索,请使用 Filters.text() 辅助方法来指定文本搜索查询过滤器。

例如,以下代码在 name 字段上执行文本搜索,以匹配字符串 "bakery""coffee"

collection.countDocuments(Filters.text("bakery coffee")).printResults("Text search matches: ")
Text search matches: [2]

对于每个匹配的文档,文本搜索会分配一个得分,表示文档与指定的文本搜索查询过滤器的相关性。要按得分返回和排序,请在投影文档中使用$meta运算符和排序表达式。

collection.find(Filters.text("bakery cafe"))
.projection(Projections.metaTextScore("score"))
.sort(Sorts.metaTextScore("score"))
.printResults()

Filters.text()辅助函数可以接受各种文本搜索选项。驱动程序提供了TextSearchOptions类来指定这些选项。

例如,以下文本搜索在搜索单词"cafe"时指定了文本搜索语言选项。

collection.countDocuments(Filters.text("cafe", TextSearchOptions().language("english")))
.printResults("Text search matches (english): ")
Text search matches (english): [1]

有关文本搜索的更多信息,请参阅MongoDB服务器手册的以下部分

返回

变更流