appfuse - hibernate search 2 - 常用注解

本文介绍如何使用Hibernate Search进行Lucene索引配置,包括字段存储、索引方式、加速策略等。涵盖@Indexed、@Field、@NumericField、@DocumentId等注解的应用场景与细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 1@Indexed  
  2.   -> index 指定索引名称  
  3. 2@Field  
  4.   -> name 指定当前属性在Lucene Document中存储的名称,默认为属性名  
  5.   -> store 指定当前属性是否被存储在Lucene index中,可选值为:  
  6.      1) Store.YES  占用大量的索引空间,支持"投影(projection)"  
  7.      2) Store.COMPRESS 压缩方式,消耗大量CPU  
  8.      3) Store.NO (default)  
  9.   -> index 指定元素索引方式和信息存储类型,可选值为:  
  10.      1) Index.NO 不索引,只有通过设置store才可以访问其内容  
  11.      2) Index.TOKENIZED (default) 使用analyzer  
  12.      3) Index.UN_TOKENIZED 不使用analyzer  
  13.      4) Index.NO_NORMS 不存储正常化数据  
  14.      是否采用分词可依据,是要查询数据本身还是它所包含的内容(文字);  
  15.      用来排序的域不需要分词。  
  16.   -> termVector 检索词频  
  17.      1) TermVector.YES  
  18.      2) TermVector.NO (default)  
  19.      3) TermVector.WITH_OFFSETS  
  20.      4) TermVector.WITH_POSITIONS  
  21.      5) TermVector.WITH_POSITION_OFFSETS  
  22.   -> indexNullAs  
  23.      1) Field.DO_NOT_INDEX_NULL  
  24.        通过hibernate.search.default_null_token指定,默认为_null_  
  25.        查询时使用相同的分词来查找空值,建议Index.UN_TOKENIZED时使用  
  26.      2) Field.DEFAULT_NULL_TOKEN (default)  
  27.   -> boost 用法形如:boost=@Boost(2f),详见@Boost  
  28. 3@NumericField  
  29.   @Field的联合注解,用于Integer, Long, Float和Double属性,索引时采用字典树结构(Trie structure).  
  30.   Lucene将此API标记为experimental,未来版本未必支持。Hibernate Search将尽量掩盖底层的API变化,但也未必能有效保证。  
  31.   -> forField  
  32.   -> precisionStep (default4)  
  33. 4@DocumentId  
  34.   用于保证索引实体的单一性。必须存储而且必须不能被分词。采用JPA方式时,如果指定了@Id则不再需要标注该注解。  
  35. 5@Fields  
  36.   同一个域采用不同的索引策略。需要为每个Field指定name属性(非强制).  
  37.   当使用@Fields时,@Field将支持两个有用的属性:  
  38.     -> analyzer 为每个field定义@Analyzer而非为属性定义  
  39.     -> bridge  每个field定义@FieldBridge而非为属性定义  
  40. 6@IndexedEmbedded  
  41.   对象有组合关系时使用。  
  42.    -> depth 关联的深度,存在循环的依赖时使用。  
  43.    -> prefix 索引fields的前缀,默认为"属性名.",如address.city中的"address."  
  44.    -> targetElement 被标注的域不是实际对象类型(如声明类型为接口)时使用,用来指定实际对象类型  
  45.   关联对象会自动被设为@Indexed  
  46. 7@ContainedIn  
  47.   双相关联的对象中,另一方配合@IndexedEmbedded使用,保证Lucene document的联动更新。  
  48.   当前类被用JPA方式标注为@Embeddable时不需要使用@ContainedIn  
  49. 8@Boost  
  50.   静态索引加速。与被索引实体的运行时状态无关。  
  51.     1) 可用在@Field的boost属性中、方法级、类级  
  52.     2) 不同方式指出的加速系数会累积,不能重复使用。如  
  53.          @Field(boost=@Boost(1.5f))  
  54.          @Boost(2f)  
  55.          public String getSummary() { return summary; }  
  56.        则summary系数为3,比普通域重要3倍  
  57.     3) 加速系数的指定并非精确的,可用来标注相对重要的实体或域。  
  58. 9@DynamicBoost  
  59.   动态索引加速。  
  60.   -> impl 指定具体的加速策略实现类  
  61.     1) 用于class或field级别  
  62.     2) 使用该标注时,需要自定义加速策略类并实现BoostStrategy接口:  
  63.          public interface BoostStrategy {  
  64.            public float defineBoost(Object value);  
  65.          }  
  66.        value是被标注的类型实例或属性值。  
  67.     3) 可以和@Boost混合使用  
  68. 10@Analyzer  
  69.   -> impl 指定具体的Analyzer实现类  
  70.   -> definition 指向@AnalyzerDef标注中name属性定义的值  
  71.   * 类方式:  
  72.      1) 可以作用于实体、属性甚至每个域  
  73.      2) 同一实体中使用不同的混合的Analyzer通常是一种坏的做法,尤其是在使用QueryParser查询时  
  74.      3) 必须保证在同一域上,索引和查询使用的是同一个Analyzer.  
  75. 11@AnalyzerDef  
  76.   Hibernate Search采用Solr framework做分词。  
  77.   版本3.3.0.Beta2之前需添加Solr依赖,之后被囊入org.hibernate:hibernate-search-analyzers中  
  78.   -> name (Required) 定义该分词器的唯一字符串  
  79.   -> charFilters (Optional) 负责对分词前的输入流预处理  
  80.   -> tokenizer (Required) 负责拆分输入流为单词或单字  
  81.   -> filters (Optional) 负责对分词后的输入流做一些额外处理  
  82.   通过@AnalyzerDef声明的Analyzer实例可以在SearchFactory中得到:  
  83.     Analyzer analyzer = fullTextSession.getSearchFactory().getAnalyzer("customanalyzer");  
  84. 12@CharFilterDef  
  85.   -> factory  
  86.   -> params  
  87. 13@TokenizerDef  
  88.   -> factory  
  89.   -> params  
  90. 14@TokenFilterDef  
  91.   -> factory  
  92.   -> params  
  93. 15@DateBridge  
  94.   日期型存储格式为 yyyyMMddHHmmssSSS  
  95.   -> resolution  
  96.      1) Resolution.DAY  
  97.      2) Resolution.HOUR  
  98.      3) Resolution.MILLISECOND  
  99.      4) Resolution.MINUTE  
  100.      5) Resolution.MONTH  
  101.      6) Resolution.SECOND  
  102.      7) Resolution.YEAR  
  103. 16@FieldBridge  
  104.   -> impl 所使用Bridge的实现类名,该实现类需实现以下接口之一,且所有实现必须是线程安全的:  
  105.     1) StringBridge  
  106.          最简单的Bridge,作用于普通的field/getter/class  
  107.          需要实现objectToString(Object object)方法,以便自定义对象到String的转换过程  
  108.     2) TwoWayStringBridge  
  109.          作用于标注了@DocumentId的属性(通常为id属性)  
  110.          需要提供双向转换,且object = stringToObject(objectToString(object))要成立  
  111.     3) FieldBridge  
  112.          可灵活操作Lucene Document.例如需要对日期分年、月、日存储在3个field时.  
  113.          需要实现set(String name,Object value,Document document,LuceneOptions luceneOptions)方法  
  114.     可选接口:  
  115.        ParameterizedBridge 用来获得参数  
  116.        AppliedOnTypeAwareBridge 用来获得被标注为@FieldBridge的类型  
  117.   -> params   
  118. 17@ClassBridge  
  119.   用于一个实体对应的多个属性的联合索引,且该索引通常需要采用一种特殊的索引方式  
  120.   -> impl  
  121.   -> name  
  122.   -> store  
  123.   -> analyzer  
  124.   -> index  
  125.   -> termVector  
  126.   -> boost  
  127.   -> params 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值