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 将转换为其完全限定类名称。重新验证类时,使用线程上下文类加载程序。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部