我想将数百万个实体放入Solr,以便按字段查询(例如范围搜索,排序,分组等)。
然而,我所拥有的实体并不平坦。他们有像Employee公司,Person有地址,Cart有List等关系。(注意所有这些是实体或数据对象,不能直接放入Solr。)
我遇到了Hibernate Search,它从非平面实体构建Lucene索引。 如果有人能指出我所做的代码,那就太好了。
我知道这是可行的,因为Elasticsearch也在这样做。 但是,因为离开Solr对我来说可能是一个昂贵的赌注,我想尝试通过自己或使用HibernateSearch API来实现扁平化实体
答案 0 :(得分:2)
Hibernate Search将实体关联添加为根实体的一部分。假设有一个 Person ,它通过地址属性与地址建立关联。 地址具有街道和 city 属性。然后, Person 实例的Lucene文档还将包含字段 address.street 和 address.city 。要启用此嵌入式索引,您需要使用 @IndexedEmbedded 注释地址属性。另请参阅搜索的在线文档 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-mapping-associated
技术上,Hibernate Search保留实体的索引属性(包括关联)所需的元信息,以及实体更改事件(或关联的更改)重建文档/索引。
这是你追求的吗?