hibernate_search_常用注解

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 

 
动态索引加速。  
 
-> impl指定具体的加速策略实现类  
 
   1)用于class或field级别  
 
   2)使用该标注时,需要自定义加速策略类并实现BoostStrategy接口:  
 
       public interface BoostStrategy{  
 
         public float defineBoost(Objectvalue);  
 
        
 
     value是被标注的类型实例或属性值。  
 
   3)可以和@Boost混合使用  
10. @Analyzer 

 
-> impl指定具体的Analyzer实现类  
 
-> definition指向@AnalyzerDef标注中name属性定义的值  
 
* 类方式:  
 
   1) 可以作用于实体、属性甚至每个域  
 
   2)同一实体中使用不同的混合的Analyzer通常是一种坏的做法,尤其是在使用QueryParser查询时  
 
   3)必须保证在同一域上,索引和查询使用的是同一个Analyzer.  
11. @AnalyzerDef 

 
Hibernate Search采用Solrframework做分词。  
 
版本3.3.0.Beta2之前需添加Solr依赖,之后被囊入org.hibernate:hibernate-search-analyzers中  
 
-> name (Required)定义该分词器的唯一字符串  
 
-> charFilters (Optional)负责对分词前的输入流预处理  
 
-> tokenizer (Required)负责拆分输入流为单词或单字  
 
-> filters (Optional)负责对分词后的输入流做一些额外处理  
 
通过@AnalyzerDef声明的Analyzer实例可以在SearchFactory中得到:  
 
   Analyzeranalyzer =fullTextSession.getSearchFactory().getAnalyzer("customanalyzer");  
12. @CharFilterDef 

 
->factory  
 
->params  
13. @TokenizerDef 

 
->factory  
 
->params  
14. @TokenFilterDef 

 
->factory  
 
->params  
15. @DateBridge 

 
日期型存储格式为yyyyMMddHHmmssSSS  
 
->resolution  
 
   1) Resolution.DAY  
 
   2) Resolution.HOUR  
 
   3) Resolution.MILLISECOND  
 
   4) Resolution.MINUTE  
 
   5) Resolution.MONTH  
 
   6) Resolution.SECOND  
 
   7) Resolution.YEAR  
16. @FieldBridge 

 
-> impl所使用Bridge的实现类名,该实现类需实现以下接口之一,且所有实现必须是线程安全的:  
 
   1)StringBridge  
 
       最简单的Bridge,作用于普通的field/getter/class 
 
       需要实现objectToString(Objectobject)方法,以便自定义对象到String的转换过程  
 
   2)TwoWayStringBridge  
 
       作用于标注了@DocumentId的属性(通常为id属性)  
 
       需要提供双向转换,且object =stringToObject(objectToString(object))要成立  
 
   3)FieldBridge  
 
       可灵活操作LuceneDocument.例如需要对日期分年、月、日存储在3个field时.  
 
       需要实现set(String name,Object value,Document document,LuceneOptionsluceneOptions)方法  
 
  可选接口:  
 
     ParameterizedBridge用来获得参数  
 
     AppliedOnTypeAwareBridge用来获得被标注为@FieldBridge的类型  
 
->params   
17. @ClassBridge 

 
用于一个实体对应的多个属性的联合索引,且该索引通常需要采用一种特殊的索引方式  
 
->impl  
 
->name  
 
->store  
 
->analyzer  
 
->index  
 
->termVector  
 
->boost  
 
-> params 


你可能感兴趣的:(Hibernate,String,object,Lucene,search,存储)