使用反应式 mongoDB 在 Micronaut 中创建 TextIndex
Creating TextIndex in Micronaut with reactive mongoDB
我在 Micronaut 应用程序中使用反应式 mongoDB
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 数据中,我们有 @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
的匿名 class 仅用于演示目的。
更新: 您可以在启动时创建索引,例如使用 @PostConstruct
。意思是在@Singleton
注解的某个仓库或class注解的服务中,在@PostConstruct
注解的方法中添加所有索引创建逻辑,然后在repository/service单例创建后调用。
我在 Micronaut 应用程序中使用反应式 mongoDB
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 数据中,我们有 @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
的匿名 class 仅用于演示目的。
更新: 您可以在启动时创建索引,例如使用 @PostConstruct
。意思是在@Singleton
注解的某个仓库或class注解的服务中,在@PostConstruct
注解的方法中添加所有索引创建逻辑,然后在repository/service单例创建后调用。