mongodb的六种索引

以下是一些与MongoDB索引相关的注解,用于在Java中使用Spring Data MongoDB进行数据建模和索引定义: 
-  @TextIndexed : 用于指示字段应该被全文索引。适用于对文本字段进行全文搜索的场景。 
-  @GeoSpatialIndexed : 用于指示字段应该被地理空间索引。适用于对地理位置进行查询和距离计算的场景。 
-  @CompoundIndex : 用于定义复合索引,即使用多个字段组合在一起创建索引。可以设置多个 @CompoundIndex 注解来定义多个复合索引。 
-  @CompoundIndexes : 用于定义多个复合索引的集合。可以在一个注解中定义多个 @CompoundIndex 。 
-  @Indexed : 用于指示字段应该被普通索引。适用于对字段进行基本查询的场景。 
-  @WildcardIndexed : 用于指示字段应该被通配符索引。适用于对字段进行模糊查询的场景。 
 这些注解可以应用在实体类的字段上,以定义索引的类型和属性。在使用Spring Data MongoDB时,这些注解可以帮助你在Java中定义和管理MongoDB的索引。 
 请注意,以上注解的名称和功能是根据常见的命名约定提供的,实际使用时可能会因库版本、框架配置或其他因素而有所不同。建议查阅相关文档以获取更准确的信息。 
 

 

具体使用:

@TextIndexed
 private String phone;
      //全文索引的开启  要求mongo版本开启配置而且版本也要支持全文索引
       //全文索引   全文索引不支持模糊匹配
        TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny("search term");
        //根据相关score排序,每页50条
        Query query = TextQuery.queryText(criteria).sortByScore().with(Pageable.ofSize(50));
        List<User> results = mongoTemplate.find(query, User.class);

 

具体使用;
    @GeoSpatialIndexed
    private Point location;

        /**
         * 我们创建了一个 NearQuery 对象,指定了中心点和最大距离。然后,使用 within() 方法将 NearQuery 应用到查询条件中,
         * 通过 Criteria 对象指定查询字段为 location 。最后,使用 mongoTemplate 执行查询并获取结果。 
         *  请注意,使用 @GeoSpatialIndexed 注解和地理空间查询需要确保MongoDB版本支持地理空间索引功能。
         *  另外,要使用地理空间查询,还需要在MongoDB服务器上启用地理空间索引的相关配置。
         */

        // 在使用 mongoTemplate 进行地理空间查询时,可以使用 near() 方法或 within() 方法来构建查询条件
        Point centerPoint = new Point(latitude, longitude);
        Distance distance = new Distance(radius, Metrics.KILOMETERS);
//        NearQuery nearQuery = NearQuery.near(centerPoint).maxDistance(distance);
        Shape shape=new Sphere(centerPoint,distance);
        Query query = new Query(Criteria.where("location").within(shape));
        List<User> results = mongoTemplate.find(query, User.class);

 

具体使用:
@Document(collection = "animals")
@CompoundIndexes({
        @CompoundIndex(name = "np_idx", def = "{'name': 1, 'phone': -1}")
})
public class User implements Serializable 


 @CompoundIndex(name = "index_name", def = "{'field1': 1, 'field2': -1}")
在上面的示例中, @CompoundIndex 注解应用在实体类上,表示要创建一个复合索引。 name 属性用于指定索引的名称, def 属性用于定义索引的字段和排序方式。在示例中,我们创建了一个复合索引,包含 field1 和 field2 两个字段,其中 field1 按升序排序, field2 按降序排序。 
 如果需要定义多个复合索引,可以使用 @CompoundIndexes 注解,在其中定义多个 @CompoundIndex 注解。 
 请注意,复合索引可以提高多个字段组合查询的性能,但也会增加索引的存储空间和更新成本。在选择创建复合索引时,需要根据具体的查询需求和数据访问模式进行权衡。 

 

具体使用:
    /**
     * 姓名
     */
    @WildcardIndexed
    private String name;

在上面的示例中, @WildcardIndexed 注解应用在 textField 字段上,表示该字段应该被通配符索引。这样可以在该字段上执行模糊查询操作。 
 需要注意的是,通配符索引可能会对查询性能产生一定的影响,特别是在大数据集上。因此,建议在使用通配符索引时谨慎考虑,并确保其真正符合你的查询需求。

 

posted @ 2023-08-26 15:04  余生请多指教ANT  阅读(549)  评论(0编辑  收藏  举报