作者: | 来源:互联网 | 2023-06-20 16:00
转载请注明出处:http:blog.csdn.netl1028386804articledetails48949275HibernateSearch的常用注解1.@Indexed
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48949275
Hibernate Search 的常用注解
1. @Indexed
-> index指定索引名称
2. @Field
-> name 指定当前属性在LuceneDocument中存储的名称,默认为属性名
-> store 指定当前属性是否被存储在Luceneindex中,可选值为:
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不存储正常化数据
是否采用分词可依据,是要查询数据本身还是它所包含的内容(文字);
用来排序的域不需要分词。
-> 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
3. @NumericField
@Field的联合注解,用于Integer, Long,Float和Double属性,索引时采用字典树结构(Triestructure).
Lucene将此API标记为experimental,未来版本未必支持。HibernateSearch将尽量掩盖底层的API变化,但也未必能有效保证。
->forField
-> precisionStep(default值4)
4. @DocumentId
用于保证索引实体的单一性。必须存储而且必须不能被分词。采用JPA方式时,如果指定了@Id则不再需要标注该注解。
5. @Fields
同一个域采用不同的索引策略。需要为每个Field指定name属性(非强制).
当使用@Fields时,@Field将支持两个有用的属性:
-> analyzer为每个field定义@Analyzer而非为属性定义
-> bridge 每个field定义@FieldBridge而非为属性定义
6. @IndexedEmbedded
对象有组合关系时使用。
-> depth关联的深度,存在循环的依赖时使用。
-> prefix索引fields的前缀,默认为"属性名.",如address.city中的"address."
->targetElement被标注的域不是实际对象类型(如声明类型为接口)时使用,用来指定实际对象类型
关联对象会自动被设为@Indexed
7. @ContainedIn
双相关联的对象中,另一方配合@IndexedEmbedded使用,保证Lucenedocument的联动更新。
当前类被用JPA方式标注为@Embeddable时不需要使用@ContainedIn
8. @Boost
静态索引加速。与被索引实体的运行时状态无关。
1)可用在@Field的boost属性中、方法级、类级
2)不同方式指出的加速系数会累积,不能重复使用。如
@Field(boost=@Boost(1.5f))
@Boost(2f)
public String getSummary() { return summary;}
则summary系数为3,比普通域重要3倍
3)加速系数的指定并非精确的,可用来标注相对重要的实体或域。
9. @DynamicBoost
动态索引加速。