Hibernate Search 的作用是对数据库中的数据进行检索的。它是 hibernate 对著名的全文检索系统 Lucene 的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为 text 的字段)建立全文索引,这样通过 hibernate search 就可以对这些字段进行全文检索后获得相应的 POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql 语句中 like 匹配)。
Hibernate Search 自动从 Hibernate ORM 实体中提取数据,以将其推送到本地 Apache Lucene 索引或远程 Elasticsearch 索引。
Hibernate Search主要有以下功能特点:
- 通过注释或 programmatic API 将实体属性声明性映射到索引字段。
- 数据库中所有实体的按需大量索引,以使用预先存在的数据初始化索引。
- 通过 Hibernate ORM 会话修改实体的即时自动索引 ,以始终保持索引最新。
- 一种搜索 DSL ,可轻松构建全文搜索查询并将命中结果检索为 Hibernate ORM 实体。
- 还有更多:分析器的配置、 搜索 DSL 中的许多不同谓词和排序、空间支持。搜索查询返回 projections 而不是 entities、聚合、使用桥接的高级自定义映射...
@Entity // This entity is mapped to an index @Indexed public class Book { // The entity ID is the document ID @Id @GeneratedValue private Integer id; // This property is mapped to a document field @FullTextField private String title; @ManyToMany // Authors will be embedded in Book documents @IndexedEmbedded private Set<Author> authors = new HashSet<>(); // Getters and setters // ... } @Entity public class Author { @Id @GeneratedValue private Integer id; // This property is mapped to a document field @FullTextField private String name; @ManyToMany(mappedBy = "authors") private Set<Book> books = new HashSet<>(); // Getters and setters // ... }
评论