我在Lucene中使用Hibernate搜索,希望能够基于配置文件中提供的过滤器名称(提取,例如this)添加AnalyzerDef,该过滤器名称在应用程序启动时加载。
现在我有这样的代码
@AnalyzerDefs({
@AnalyzerDef(name = "phraseAnalyzer",
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ClassicFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class)
}),
})
@MappedSuperclass
public abstract class MyObject {
我看了看医生,没有想到我会怎么做。
我怀疑this question可能有关联。
1条答案
按热度按时间3qpi33ja1#
在Hibernate Search 5.11(以及5.6或5.7之后的IIRC)中,可以使用
LuceneAnalysisDefinitionProvider
以编程方式定义分析器。实作界面:
然后让Hibernate搜索使用它:
您可以在
register
的实现中做任何您想做的事情,因此您可以 checkout 系统属性,什至加载配置文件。如果您的实现有限,您还可以在启动JVM时通过系统属性设置hibernate.search.lucene.analysis_definition_provider
来直接覆盖定义提供者。有关https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#section-programmatic-analyzer-definition详细信息,请访问www.example.com。
在Hibernate Search6中,API稍有不同,但它们遵循相同的核心原则:https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#backend-lucene-analysis,您甚至可以将Spring/CDI bean注入到分析配置器中(在Search 5中无法做到这一点,或者至少Hibernate Search无法帮助您做到这一点)。