据我所知,没有 XML替代来映射 Hibernate Search 的实体。但是,拥有用于搜索的XML配置可能不是一个好主意。但在我的具体情况下,我有一个gradle多模块Spring项目,如 -
这不是一个单独的项目,而是我从 crawler.war 或 search.war 中生成单独的 war 。所以你看我需要为所有单独的模块使用公共实体,从而分离生成的war。因此,不应期望在公共实体中直接使用Hibernate Search映射注释。
现在我想知道在搜索模块中导入Hibernate Search注释时,有什么方法可以将常用实体注入其中吗?
[非常感谢任何其他与项目结构相关的建议或建议]
提前致谢。
答案 0 :(得分:4)
如文档中所述,您可以使用programmatic mapping API。
基本上,在你的"搜索"在项目中,你必须编写一个定义映射的类:
public class MyAppSearchMappingFactory {
@Factory
public SearchMapping getSearchMapping() {
SearchMapping mapping = new SearchMapping();
mapping
.analyzerDef( "en", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( EnglishPorterFilterFactory.class )
.entity(Address.class).indexed()
.property("addressId", ElementType.METHOD)
.documentId()
.name("id")
.property("street1", ElementType.METHOD)
.field()
.analyzer("en")
.store(Store.YES)
.field()
.name("address_data")
.analyzer("en");
return mapping;
}
}
然后配置Hibernate Search以使用此类作为映射源,如下所示。
如果您使用.properties
文件进行与Hibernate相关的配置:
hibernate.search.model_mapping = com.acme.MyAppSearchMappingFactory
如果您使用persistence.xml
文件进行与Hibernate相关的配置:
<persistence ...>
<persistence-unit name="...">
...
<properties>
<property name="hibernate.search.model_mapping"
value="com.acme.MyAppSearchMappingFactory"/>
</properties>
</persistence-unit>
</persistence>