`
BuN_Ny
  • 浏览: 82879 次
  • 来自: 济南
社区版块
存档分类
最新评论

Hibernate Search常用注解总结

阅读更多

 

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; }
       则summary系数为3,比普通域重要3倍
    3) 提升因数的指定并非精确的,可用来标注相对重要的实体或域。
 
9. @DynamicBoost
  动态索引加速。
  -> impl 指定具体的加速策略实现类
    1) 用于class或field级别
    2) 使用该标注时,需要自定义加速策略类并实现BoostStrategy接口:
         public interface BoostStrategy {
           public float defineBoost(Object value);
         }
       value是被标注的类型实例或属性值。
    3) 可以和@Boost混合使用
 
10. @Analyzer
  -> impl 指定具体的Analyzer实现类
  -> definition 指向@AnalyzerDef标注中name属性定义的值
  * 类方式:
     1) 可以作用于实体、属性甚至每个域
     2) 同一实体中使用不同的混合的Analyzer通常是一种坏的做法,尤其是在使用QueryParser查询时
     3) 必须保证在同一域上,索引和查询使用的是同一个Analyzer.
 
11. @AnalyzerDef
  Hibernate Search采用Solr framework做分词。
  版本3.3.0.Beta2之前需添加Solr依赖,之后被囊入org.hibernate:hibernate-search-analyzers中
  -> name (Required) 定义该分词器的唯一字符串
  -> charFilters (Optional) 负责对分词前的输入流预处理
  -> tokenizer (Required) 负责拆分输入流为单词或单字
  -> filters (Optional) 负责对分词后的输入流做一些额外处理
  通过@AnalyzerDef声明的Analyzer实例可以在SearchFactory中得到:
    Analyzer analyzer = fullTextSession.getSearchFactory().getAnalyzer("customanalyzer");
 
12. @CharFilterDef
  定义CharFilter,一般配合@AnalyzerDef使用。
  -> factory
  -> params
13. @TokenizerDef
  定义Tokenizer,一般配合@AnalyzerDef使用。
  -> factory
  -> params
14. @TokenFilterDef
  定义TokenFilter,一般配合@AnalyzerDef使用。
  -> 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(Object object)方法,以便自定义对象到String的转换过程
    2) TwoWayStringBridge
         作用于: 1.标注了@DocumentId的属性(通常为id属性)
                 2.需要从index中读回的属性
         需要提供双向转换,且object = stringToObject(objectToString(object))要成立
    3) FieldBridge
         可灵活操作Lucene Document.例如需要对日期分年、月、日存储在3个field时.
         需要实现set(String name,Object value,Document document,LuceneOptions luceneOptions)方法
    可选接口:
       ParameterizedBridge 用来获得参数
       AppliedOnTypeAwareBridge 用来获得被标注为@FieldBridge的类型
  -> params 
 
17. @ClassBridge
  用于一个实体对应的多个属性的联合索引,且该索引通常需要采用一种特殊的索引方式
  -> impl
  -> name
  -> store
  -> analyzer
  -> index
  -> termVector
  -> boost
  -> params
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包7

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包9

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    cms后台管理

    Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...

    java开源包101

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    Java资源包01

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

Global site tag (gtag.js) - Google Analytics