如何在具有Spring-Data-MongoDB的实体中设置@TextIndex名称

时间:2016-09-07 19:17:48

标签: java spring mongodb spring-data spring-data-mongodb

我有一个实体,由音乐家政治家继承,还有一个存储库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名称,而不是在我保存的实体类之后命名它。试图搜索可以找到任何。

1 个答案:

答案 0 :(得分:0)

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

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