Hibernate常用注释

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35091777/article/details/79362001

1. @Indexed
  -> index 指定索引名称

2. @Field
  -> name 指定当前属性在Lucene Document中存储的名称,默认为属性名
  -> store 指定当前属性是否被存储在Lucene index中,可选值为:
     1) Store.YES  占用大量的索引空间,支持"投影(projection)"
     2) Store.COMPRESS 压缩方式,消耗大量CPU
     3) Store.NO (default)
  -> index 指定元素索引方式和信息存储类型,可选值为:
     1) Index.NO 不索引,只有通过设置store才可以访问其内容
     2) Index.TOKENIZED (default) 使用analyzer
     3) Index.UN_TOKENIZED 不使用analyzer
     4) Index.NO_NORMS (advanced)
     是否采用分词可依据,是要查询数据本身还是它所包含的内容(文字);
     用来排序的域不需要分词。
  -> termVector 检索统计信息
     1) TermVector.YES
     2) TermVector.NO (default)
     3) TermVector.WITH_OFFSETS
     4) TermVector.WITH_POSITIONS
     5) TermVector.WITH_POSITION_OFFSETS
  -> indexNullAs
     1) Field.DO_NOT_INDEX_NULL
       通过hibernate.search.default_null_token指定,默认为_null_
       查询时使用相同的分词来查找空值,建议Index.UN_TOKENIZED时使用
     2) Field.DEFAULT_NULL_TOKEN (default)
  -> boost 用法形如:boost=@Boost(2f),详见@Boost

-------------------------------------------------------------------------------------------------------------
Stored  Indexed  Tokenized
   Y       Y         N      适合原始值需要保持原样的字段,如URL、文件系统路径、日期、个人名称、电话号码等;
   Y       N         N      适合需要和搜索结果一起显示的字段,但从不直接搜索它的值,如URL或数据库主键;
   N       Y         Y      适合索引大量的文本而不需要以原始形式重新获得它,如网页主题或各种文本文档;
-------------------------------------------------------------------------------------------------------------

3. @NumericField
  @Field的联合注解,用于Integer, Long, Float和Double属性,索引时采用字典树结构(Trie structure).
  Lucene将此API标记为experimental,未来版本未必支持。Hibernate Search将尽量掩盖底层的API变化,但也未必能有效保证。
  -> forField
  -> precisionStep (default值4)

4. @DocumentId
  用于保证索引实体的单一性。必须存储而且必须不能被分词(相当于加了@Field(store=Store.YES, index=Index.UN_TOKENIZED))
  采用JPA方式时,如果指定了@Id则不再需要标注该注解。

5. @Fields
  同一个域采用不同的索引策略。需要为每个Field指定name属性(非强制).
  当使用@Fields时,@Field将支持两个有用的属性:
    -> analyzer 为每个field定义@Analyzer而非为属性定义
    -> bridge  每个field定义@FieldBridge而非为属性定义

6. @IndexedEmbedded
  对象有组合关系时使用。
   -> depth 关联的深度,存在循环的依赖时使用。
   -> prefix 索引fields的前缀,默认为"属性名.",如address.city中的"address."
   -> targetElement 被标注的域不是实际对象类型(如声明类型为接口)时使用,用来指定实际对象类型
    1) 关联对象会自动被设为@Indexed
    2) 相当于在当前实体对应的Document下创建一个或多个名为"前缀+被组合实体中标注了@Field的域"的Field
    3) 对集合、Map、对象数组同样生效
    4) 成本很高,尽量不要过多的使用该注解

7. @ContainedIn
  双相关联的对象中,另一方配合@IndexedEmbedded使用,保证Lucene document的联动更新。
  当前类被用JPA方式标注为@Embeddable时不需要使用@ContainedIn

8. @Boost
  静态索引加速。与被索引实体的运行时状态无关。
    1) 可用在@Field的boost属性中、方法级、类级
    2) 不同方式指出的加速系数会累积,不能重复使用。如
         @Field(boost=@Boost(1.5f))
         @Boost(2f)
         public String getSummary() { return summary; }
     

猜你喜欢

转载自blog.csdn.net/qq_35091777/article/details/79362001