Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

文本搜索(Text Search)

在此页面上

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

MongoDB支持对文档中的string内容执行文本搜索的查询操作。 为了执行文本搜索, MongoDB使用文本索引和 $text查询运算符。 要学习;了解有关文本搜索的更多信息,请参阅服务器手册中的文本搜索

驾驶员提供了Filters.text()辅助方法来促进文本搜索查询筛选器的创建。

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

  • 集合,其中填充了Github test.restaurants文档资产 中restaurants.json 文件中的文档。

  • 以下 import 语句:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.model.TextSearchOptions;
import com.mongodb.client.model.Projections;
import org.bson.Document;

重要

本指南使用自定义Subscriber实现,如自定义订阅者实现示例指南中所述。

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

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

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

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

要创建文本索引,请使用Indexes.text()静态助手为文本索引创建规范,并将规范传递给MongoCollection.createIndex()方法以创建索引。

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

MongoCollection<Document> collection = database.getCollection("restaurants");
collection.createIndex(Indexes.text("name")).subscribe(new PrintToStringSubscriber<String>());

要执行文本Atlas Search ,请使用 Filters.text() 辅助方法指定文本Atlas Search查询筛选器。

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

collection
.countDocuments(Filters.text("bakery coffee"))
.subscribe(new PrintSubscriber<Long>("Text search matches: %s"));
Text search matches: [2]

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

collection.find(Filters.text("bakery cafe"))
.projection(Projections.metaTextScore("score"))
.sort(Sorts.metaTextScore("score"))
.subscribe(new PrintDocumentSubscriber());

Filters.text() 助手可以接受各种文本Atlas Search选项。 驱动程序提供了TextSearchOptions类来指定这些选项。

例如,以下文本Atlas Search在对单词 "cafe" 执行文本Atlas Search时指定文本Atlas Search语言选项:

collection.countDocuments(
Filters.text("cafe", new TextSearchOptions().language("english"))
).subscribe(new PrintSubscriber<Long>("Text search matches (english): %s"));
Text search matches (english): [1]

要了解有关文本Atlas Search的更多信息,请参阅MongoDB Server手册中的以下部分:

后退

读取偏好