Java 如何在具有Spring数据MongoDB的实体中设置@TextIndex名称
我有一个实体人,由音乐家和政治家继承,还有一个存储库PersonRepository 我试图使用PersonRepository.save(..)默认方法将所有三个实体保存到MongoDB中的a集合“person”,但Spring Data MongoDB将其保存到3个单独的集合“person”、“Musitor”和“Political” Java代码:Java 如何在具有Spring数据MongoDB的实体中设置@TextIndex名称,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我有一个实体人,由音乐家和政治家继承,还有一个存储库PersonRepository 我试图使用PersonRepository.save(..)默认方法将所有三个实体保存到MongoDB中的a集合“person”,但Spring Data MongoDB将其保存到3个单独的集合“person”、“Musitor”和“Political” Java代码: 是否有任何方法可以设置TextIndex名称,而不是以我正在保存的实体类命名它。尝试搜索,但无法找到任何 目前无法使用基于注释的设置设置Tex
是否有任何方法可以设置TextIndex名称,而不是以我正在保存的实体类命名它。尝试搜索,但无法找到任何 目前无法使用基于注释的设置设置
TextIndex
的索引名称。为此,请通过模板使用索引操作
手动设置文本索引
template.indexOps(Person.class)
.ensureIndex(
新的TextIndexDefinitionBuilder()
.named(“YourIndexNameHere”)
恩菲尔德先生(“传记”)
.build());
尝试了此操作,但如果手动创建的TextIndex名称与{class name}\u TextIndex不同,则无论何时执行findXXX mongoTemplate,都会抛出一个异常,说明{class name}\u TextIndex未找到。我已设置了一个示例,所有操作似乎都按预期进行。请仔细看看。谢谢你的样品。我想我错过了手动设置文本索引的部分。尝试手动添加索引时,我没有删除TextIndex注释。工作起来很有魅力。谢谢但是仍然想知道为什么spring mongodb TextIndex没有根据带注释的集合名称命名。我研究了创建TextIndex部分的一些代码。集合名称将在那里使用。@ChristophStrobl我使用您的PR作为答案:)
@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> {
}
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
}
]