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

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
分享到:
评论

相关推荐

    Getting Started with Hibernate search

    - hibernate-commons-annotations.jar:Hibernate项目的一些常用工具类。 可选地,你还可以添加apache-solr-analyzer.jar,这个JAR文件(在Hibernate Search发行版中可获得)是从SOLR发行版中提取的一部分,包含...

    hibernatesearch和庖丁解牛字典等常用驱动包集合,

    标题提到的"hibernatesearch"是Hibernate的一个扩展,它将全文搜索功能引入了Java应用程序,而"庖丁解牛字典"则可能是指一个用于数据库操作或数据解析的工具。让我们深入探讨这两个技术及其在实际开发中的应用。 **...

    hibernate注解

    ### Hibernate注解详解 #### 创建一个注解项目 (Setting up an annotations ...以上概述了Hibernate注解的基本概念和常用注解的使用方式。通过合理地使用这些注解,开发人员可以构建出高效且易于维护的持久层代码。

    SSH之Hibernate总结

    除了上述内容,还有更多高级特性如JPA支持、Hibernate Search、CGLIB动态代理等,可以进一步探索学习。 学习风格: 1. 先脉络,后细节:先理解整体框架和核心概念,再深入细节。 2. 先操作,后原理:通过实践来...

    hibernate_search

    ### Hibernate Search:Apache Lucene 集成 #### 一、概述 Hibernate Search 是一个用于在 Java 应用程序中实现全文搜索功能的强大框架。它通过集成 Apache Lucene(一个高性能、全功能的文本搜索引擎库),为开发...

    hibernate的jar包

    这个“hibernate的jar包”很可能包含了Hibernate框架的核心库和其他相关组件,比如Hibernate Search,这从压缩包子文件的文件名称“hibernate-search-5.5.2.Final”可以推断出来。 Hibernate的核心功能包括: 1. *...

    hibernate-4.2.3.required

    - hibernate-commons-annotations.jar:包含常用的Hibernate注解。 - 以及可能的其他依赖库,如slf4j、log4j等日志框架,或连接池如c3p0、Apache DBCP等。 在实际使用中,开发者还需要根据具体需求添加相应的数据库...

    Hibernate开发需要的8个基础包

    "Hibernate开发需要的8个基础包"涵盖了开发过程中最常用和必要的依赖,这些包能够帮助我们实现基本的Hibernate操作。现在,我们将详细探讨这些包的作用和功能。 1. **Hibernate Core**:这是Hibernate的核心库,...

    hibernate框架官方4.4.0版本下载

    Hibernate框架是Java开发中常用的持久化层解决方案,它简化了数据库操作,使开发者可以使用对象关系映射(ORM)方式来处理数据。4.4.0版本是Hibernate的一个稳定版本,提供了许多改进和新特性。 在Java Web后端开发...

    hibernate-release-4.1.0.Final全部jar包

    使用Hibernate通常涉及以下步骤:配置Hibernate(如hibernate.cfg.xml),创建实体类,编写映射文件(hbm.xml或注解),建立SessionFactory,通过Session进行数据库交互,最后进行事务管理和关闭Session。...

    hibernate3.6所用包

    - `hibernate-search-orm.jar`:提供了全文搜索功能,基于Lucene集成。 - `hibernate-annotations.jar`和`hibernate-validator.jar`:前者提供了ORM的注解支持,后者实现了JSR 303/349 Bean Validation规范,用于...

    hibernate文档

    2. **工具** - 作为开发工具,Hibernate 提供了丰富的 API 和配置选项,帮助开发者高效地管理和操作数据库,是 Java 开发中的常用工具。 **文件名称列表:** “Hibernate” **详细知识点:** 1. **对象关系映射...

    IBM经典面试题

    9. **高级特性**:使用Hibernate的 Criteria、Hibernate Search、JPA规范等功能进行复杂查询和全文搜索。 10. **最佳实践**:理解何时应该使用Hibernate,何时应该避免,以及在大型项目中如何有效地组织和管理持久...

    s2sh整合 增删改查功能(2)

    总结来说,S2SH整合是Web开发中常用的一种技术栈,通过整合这三个框架,我们可以高效地开发出功能完善的Web应用。在这个过程中,理解并掌握每个框架的核心功能以及它们之间的协作方式至关重要。这个教程提供了一个...

    Seam框架文档简述

    Seam作为一个胶水框架,能够很好地整合各种技术栈,如AJAX、Facelet、JSF、EJB3、Hibernate、Hibernate Search、JBPM、Drools、Email、iText、JMS等,为开发者提供了一个完整的开发环境。 通过以上介绍,我们可以...

    springbootdemo.zip

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、RabbitMQ、Quartz 等,让开发者可以“开箱即用”。在“springbootdemo.zip”这个压缩包中,我们看到有两个子文件夹:“springboot -md”和“springboot-final”...

    程序员面试秘籍.docx

    4. **ORM框架**:MyBatis的映射方式包括Map映射、注解映射和XML映射,面试中可能会要求解释它们是如何将SQL结果封装为目标对象并返回的,以及如何进行批量插入和获取自动生成的键值。 5. **分布式服务框架**:...

    实体类自动生产

    2. **Hibernate Tools**:作为Hibernate ORM框架的一部分,Hibernate Tools提供了逆向工程功能,可以基于数据库模式生成实体类、映射文件(.hbm.xml)以及DAO层代码。它支持Ant、Maven和Eclipse等集成开发环境。 3....

    网上商城shop

    SSH是Java Web开发中常用的一个集成框架,它将Struts2的MVC设计模式、Spring的依赖注入以及Hibernate的对象关系映射集成为一体,大大提高了开发效率和系统的可维护性。 首先,Struts2作为 MVC 框架,负责处理用户的...

    springboot444新冠物资管理系统的设计与实现pf.zip

    此外,Spring Boot的自动配置特性使得我们可以快速集成各种常用库,如MyBatis或Hibernate,进行数据持久化操作。 在数据库设计方面,通常会采用关系型数据库,如MySQL或PostgreSQL,存储物资种类、数量、供应商信息...

Global site tag (gtag.js) - Google Analytics