Hibernate 将@AnalyzerDef Analyzer定义移动到一个单独的类中

Hibernate 将@AnalyzerDef Analyzer定义移动到一个单独的类中,hibernate,hibernate-search,Hibernate,Hibernate Search,我在link上阅读文档,我想将Analyzer定义移动到一个单独的类中 这是我想移动的代码块,以便不将其绑定到特定实体 @实体 @索引 @AnalyzerDef(name=“customanalyzer”, tokenizer=@TokenizerDef(工厂=StandardTokenizerFactory.class), 过滤器={ @TokenFilterDef(工厂=LowerCaseFilterFactory.class), @TokenFilterDef(工厂=SnowballPor

我在link上阅读文档,我想将Analyzer定义移动到一个单独的类中

这是我想移动的代码块,以便不将其绑定到特定实体

@实体
@索引
@AnalyzerDef(name=“customanalyzer”,
tokenizer=@TokenizerDef(工厂=StandardTokenizerFactory.class),
过滤器={
@TokenFilterDef(工厂=LowerCaseFilterFactory.class),
@TokenFilterDef(工厂=SnowballPorterFilterFactory.class,参数={
@参数(name=“language”,value=“English”)
})
})
公共课堂用书{
@场
@Analyzer(definition=“customanalyzer”)
私有字符串标题;
..

基本上,我希望将所有这些定义到一个单独的类中,并且只将
@Analyzer(definition=“customanalyzer”)
添加到我的实体类中


有什么想法吗?非常感谢

现在,您唯一的选择是将定义移动到
package info.java
文件中,并用以下内容填充:

@AnalyzerDef(name = "customanalyzer",
  tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
  filters = {
    @TokenFilterDef(factory = LowerCaseFilterFactory.class),
    @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
      @Parameter(name = "language", value = "English")
  })
})
package org.whatever.my.package.is;
请注意,此包中必须至少有一个带注释的实体,否则Hibernate搜索将忽略它



Hibernate Search 5.8将提供一个实验性的专用编程API,允许以全局方式定义分析器,但此功能尚未发布(甚至在最新的5.8.Beta2中也未发布)。

现在,您唯一的选择是将定义移动到
包信息.java
文件中,并用以下内容填充:

@AnalyzerDef(name = "customanalyzer",
  tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
  filters = {
    @TokenFilterDef(factory = LowerCaseFilterFactory.class),
    @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
      @Parameter(name = "language", value = "English")
  })
})
package org.whatever.my.package.is;
请注意,此包中必须至少有一个带注释的实体,否则Hibernate搜索将忽略它



HibernateSearch5.8将提供一个实验性的、专用的编程API,允许在全球范围内定义分析器,但该功能尚未发布(甚至在最新的5.8.Beta2中也未发布).

Hibernate Search中的
@AnalyzerDef
设计非常糟糕。例如,您无法提取包含分析器定义的单独库,并在您的服务或应用程序中使用它们。如果您想定义分析器定义,它们需要引入可索引实体

但是,您可以创建如下假实体:

@Entity
@Subselect("select * from analyzers_definition")
@Indexed(index = "analyzers_definition")
@AnalyzerDef(...)
public class AnalyzersDefinition {
  @Id protected Long id;
}

由于
@Subselect
注释,表不会在数据库中创建,但
@AnalyzerDef
注释将被正确使用。唯一的缺点是“analyzers\u定义”索引将在您的Lucene/ElasticSearch/任何存储中创建。但这看起来有点问题。

Hibernate Search中的
@AnalyzerDef
设计非常糟糕。例如,您无法提取带有分析器定义的单独库,并在您的服务或应用程序中使用它们。它们需要引入indexab如果要定义analyzer定义,请选择le实体

但是,您可以创建如下假实体:

@Entity
@Subselect("select * from analyzers_definition")
@Indexed(index = "analyzers_definition")
@AnalyzerDef(...)
public class AnalyzersDefinition {
  @Id protected Long id;
}
由于
@Subselect
注释,表不会在数据库中创建,但是
@AnalyzerDef
注释将被正确使用。唯一的缺点是“analyzers_definition”索引将在Lucene/ElasticSearch/任何存储中创建。但这看起来有点问题