7.4.4. 网桥
在讨论实体的基本映射时,到目前为止一个重要的事实被忽略。在 Lucene 中,所有索引字段都必须以字符串表示。标有 @Field 的所有实体 属性都必须转换为要索引的字符串。我们目前尚未提到过的原因是,对于您的大多数属性,Hibernate Search 为您承担了转换任务,得益于一组内置桥。然而,在某些情况下,您需要更精细地控制转换过程。
7.4.4.1. 内置网桥 复制链接链接已复制到粘贴板!
Hibernate Search 附带一组 Java 属性类型和完整文本表示法之间的内置桥接。
- null
-
每个默认
null元素都没有索引。Lucene 不支持 null 元素。但在某些情况下,插入代表空值的自定义令牌会很有用。如需更多信息,请参阅。 - java.lang.String
- 字符串的索引方式是短、短、整数、Integer、长、Long、float、Float、双.
- Double, BigInteger, BigDecimal
数字转换为字符串表示法。请注意,数字不能由 Lucene(即在范围查询中使用)从开箱即用:它们必须被 padded。
注意使用 Range 查询存在缺点,另一种方法是使用 Filter 查询,它将结果查询过滤到适当的范围。Hibernate Search 还支持使用自定义 StringBridge,如自定义网桥中所述。
- java.util.Date
日期存储为 yyyMMddHHmmsSSS,时间为 yyyMMddHHmmsSSS,时间为 2006 年 11 月 7 日 4:03PM 和 12ms EST。您不应该真正对内部格式造成干扰。重要的是,在使用 TermRangeQuery 时,您应该知道日期必须以 GMT 时间表示。
通常,不需要存储毫秒的最新数据。
@DateBridge定义您希望在索引中存储的适当解析(@DateBridge(resolution=Resolution.DAY)。然后,将相应地截断日期模式。
@Entity
@Indexed
public class Meeting {
@Field(analyze=Analyze.NO)
private Date date;
...
解析低于 MILLISECOND 的日期不能是 @DocumentId。
默认日期网桥使用 Lucene 的 DateTools 从和转换为 String。这意味着所有日期都以 GMT 时间表示。如果您的要求要在固定的时区中存储日期,您必须实施自定义日期桥接。确保您了解应用程序与日期索引和搜索相关的要求。
- java.net.URI, java.net.URL
- URI 和 URL 将转换为其字符串表示法。
- java.lang.Class
- class 将转换为其完全限定类名称。重新验证类时,使用线程上下文类加载程序。