Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反应式mongoDB在Micronaut中创建文本索引_Java_Micronaut_Micronaut Data - Fatal编程技术网

Java 使用反应式mongoDB在Micronaut中创建文本索引

Java 使用反应式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

我正在使用Micronaut应用程序的反应式mongoDB

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
在应用程序启动时自动创建索引。请参阅更新的答案。