java - 使用响应式 mongoDB 在 Micronaut 中创建 TextIndex
问题描述
我正在将响应式 mongoDB 与 Micronaut 应用程序一起使用
implementation("io.micronaut.mongodb:micronaut-mongo-reactive")
尝试创建 TextIndex 和搜索自由文本功能
public class Product {
@BsonProperty("id")
private ObjectId id;
private String name;
private float price;
private String description;
}
在 spring data 中,我们必须@TextIndexed(weight = 2)
为集合创建一个 TextIndex,这在 Micronaut 应用程序中是等价的。
解决方案
恐怕 Micronaut Data 还不支持 MongoDB 基于注解的自动索引创建。Micronaut Data 现在简化了仅使用 SQL 数据库的工作。
但是您仍然可以像这样手动创建索引MongoClient
:
@Singleton
public class ProductRepository {
private final MongoClient mongoClient;
public ProductRepository(MongoClient mongoClient) {
this.mongoClient = mongoClient;
}
public MongoCollection<Product> getCollection() {
return mongoClient
.getDatabase("some-database")
.getCollection("product", Product.class);
}
@PostConstruct
public void createIndex() {
final var weights = new BasicDBObject("name", 10)
.append("description", 5);
getCollection()
.createIndex(
Indexes.compoundIndex(
Indexes.text("name"),
Indexes.text("description")
),
new IndexOptions().weights(weights)
)
.subscribe(new DefaultSubscriber<>() {
@Override
public void onNext(String s) {
System.out.format("Index %s was created.%n", s);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Completed");
}
});
}
}
您当然可以使用任何您想要的订阅者。该匿名类扩展DefaultSubscriber
在这里仅用于演示目的。
更新:您可以在启动时创建索引,例如使用@PostConstruct
. 这意味着将所有索引创建逻辑添加到@PostConstruct
某个存储库或由注释的服务类中注释的方法中@Singleton
,然后将在存储库/服务单例创建后调用。
推荐阅读
- javascript - Visual Studio Code 不允许我调试我编写的特定代码
- c# - 带有 Blazor 的 ASP.NET Core:无法确定 cookie 身份验证
- java - JSP 抛出空指针异常
- php - 如何在 PHP 中运行 websocket 服务器时运行计算?
- php - 有没有办法在 php/Laravel 中不提示下载文件
- css - 如何使元素前后的倾斜结尾?
- php - 配置 Codeigniter-3.1.10 以使用 mongodb
- max - SSRS(报表生成器)来自同一数据集的最小值和最大值
- php - 警告:在第 234 行遇到一个非数字值
- php - MyISAM 比赛条件 / LOCK TABLES