Java 使用反应式mongoDB在Micronaut中创建文本索引
我正在使用Micronaut应用程序的反应式mongoDBJava 使用反应式mongoDB在Micronaut中创建文本索引,java,micronaut,micronaut-data,Java,Micronaut,Micronaut Data,我正在使用Micronaut应用程序的反应式mongoDB implementation("io.micronaut.mongodb:micronaut-mongo-reactive") 正在尝试创建文本索引和搜索自由文本功能 public class Product { @BsonProperty("id") private ObjectId id; private String name; private float
implementation("io.micronaut.mongodb:micronaut-mongo-reactive")
正在尝试创建文本索引和搜索自由文本功能
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数据现在只简化了与SQL数据库的工作
但是您仍然可以使用MongoClient
手动创建索引,如下所示:
@Singleton
公共类产品存储库{
私人最终MongoClient MongoClient;
公共产品存储库(MongoClient MongoClient){
this.mongoClient=mongoClient;
}
公共MongoCollection getCollection(){
返回mongoClient
.getDatabase(“某些数据库”)
.getCollection(“产品”,产品类别);
}
@施工后
public void createIndex(){
最终var权重=新的BasicDBObject(“名称”,10)
.附加(“说明”,5);
getCollection()
.createIndex(
索引.compoundex(
index.text(“名称”),
索引。文本(“说明”)
),
新索引选项().权重(权重)
)
.subscribe(新的DefaultSubscriber(){
@凌驾
public void onNext(字符串s){
System.out.format(“索引%s已创建。%n”,s);
}
@凌驾
公共作废登记员(可丢弃的t){
t、 printStackTrace();
}
@凌驾
未完成的公共空间(){
系统输出打印项次(“完成”);
}
});
}
}
您当然可以使用任何您想要的订户。此处仅出于演示目的使用扩展了DefaultSubscriber
的匿名类
更新:您可以在启动时创建索引,例如使用
@PostConstruct
。这意味着在由@PostConstruct
注释的方法中,在由@Singleton
注释的某个存储库或服务类中添加所有索引创建逻辑,然后在创建存储库/服务Singleton后将调用它。谢谢您的回答,是的,这对我来说很有意义,您能更新代码以在启动时运行吗。我尝试了ApplicationEventListener的实现,但代码从未执行,能否请您在启动事件时更新代码?您可以使用@PostConstruct
在应用程序启动时自动创建索引。请参阅更新的答案。