gpt4 book ai didi

java - 如何使用 Spring-Data-MongoDB 在实体中设置 @TextIndex 名称

转载 作者:行者123 更新时间:2023-12-03 15:59:59 25 4
gpt4 key购买 nike

我有一个实体Person,由MusicianPolitician继承,还有一个存储库PersonRepository。

我试图使用 PersonRepository.save(..) 默认方法将所有三个实体保存到 MongoDB 中的集合“person”中,但不知何故,Spring-Data-MongoDB 将其保存到 3 个单独的集合“person”、“音乐家”和“政治家”。

Java 代码:

@Document
public class Person {
@Id private String id;

@Indexed private String name;

@TextIndexed private String biography;
}

@Document
public Musician extends Person {
private String something;
}

@Document
public Politician extends Person {
private String somethingElse;
}

@Repository
public interface PersonRepository extends CrudRepository<User, String> {
}

在阅读了一些帖子后,说我必须将存储库的所有三个实体的集合名称设置到注释 @Document(collection = "person") 中,以将其保存到同一个集合中。

它工作得很好,但是当我检查 MongoDB 中的索引时,不知怎的,我得到了以最后保存的实体类命名的 TextIndex。

似乎 TextIndex 总是以保存的实体类名称命名,而不是我在文档注释中设置的集合名称。

MongoDB Shell:

db.person.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.person"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "Musician_TextIndex",
"ns" : "test.person",
"weights" : {
"description" : 1,
"name" : 10
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]

有什么方法可以设置 TextIndex 名称,而不是在我保存的实体类之后命名它。尝试搜索可以找到任何。

最佳答案

目前无法使用基于注释的设置来设置 TextIndex 的索引名称。为此,请通过模板使用IndexOperations手动设置文本索引。

template.indexOps(Person.class)
.ensureIndex(
new TextIndexDefinitionBuilder()
.named("YourIndexNameHere")
.onField("biography")
.build());

关于java - 如何使用 Spring-Data-MongoDB 在实体中设置 @TextIndex 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com