8

我们如何Indexes使用创建以下查询MongoTemplate?我指的是网站http://docs.mongodb.org/v2.4/tutorial/search-for-text/他们没有提供任何关于我们如何使用 MongoTemplate 创建索引的详细信息?

db.getCollection('user').ensureIndex({ firstName: "text", middleName : 
"text", lastName : "text",emailId:"text" });
4

3 回答 3

11

假设您的实体User建模为

@Document
class User {
    String firstName;
    String middleName;
    String lastName;
    String emailId;
}

并且想要基于其 firstName、middleName、lastName 和 emailId 字段的文本索引,原始 MongoDB 索引定义将如下所示:

 { 
    firstName: "text", 
    middleName: "text", 
    lastName: "text",
    emailId: "text" 
}

要在上面要启用全文搜索的字段上创建文本索引,请执行以下操作

TextIndexDefinition textIndex = new TextIndexDefinitionBuilder()
    .onField("firstName")
    .onField("middleName")
    .onField("lastName")
    .onField("emailId")
    .build();

MongoTemplate mongoTemplate = new MongoTemplate(new Mongo(), "database"); // obtain MongoTemplate
mongoTemplate.indexOps(User.class).ensureIndex(textIndex);

或者您可以通过映射注释自动创建索引:

@Document
class User {
    @TextIndexed String firstName;
    @TextIndexed String middleName;
    @TextIndexed String lastName;
    @TextIndexed String emailId;
}
于 2015-10-14T14:41:46.960 回答
8

使用 Spring Java 在 mongo 中创建索引的最简单方法是:

// Define ur mongo template defination

DBObject indexOptions = new BasicDBObject();
indexOptions.put("a", 1);
indexOptions.put("b", 1);
indexOptions.put("c.d", 1);
indexOptions.put("e.f", 1);
CompoundIndexDefinition indexDefinition =
            new CompoundIndexDefinition(indexOptions);
mongoTemplate.indexOps(<Classname>.class).ensureIndex(indexDefinition);

可以在索引定义上配置唯一索引: mongoTemplate.indexOps(<Classname>.class).ensureIndex(indexDefinition.unique());

于 2016-06-02T09:19:21.100 回答
0

在春天 mongodb 2.0.1

    TextIndexDefinition textIndex = new TextIndexDefinition.TextIndexDefinitionBuilder().onField(indexName).build();

    mongoTemplate.indexOps(DINMonitorLog.class).ensureIndex(textIndex);
于 2017-11-10T22:32:03.030 回答