在 Hibernate Search 中运行时选择分析器

我将 Hibernate Search 与 Lucene 结合使用,并且希望能够基于配置文件中提供的Filter 名称(获取,例如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 {

我查看了文档,但并没有告诉我我将如何做到这一点。

我怀疑这个问题可能是相关的。


有只小跳蛙
浏览 112回答 1
1回答

慕的地10843

在 Hibernate Search 5.11(以及自 5.6 或 5.7,IIRC)中,您可以使用LuceneAnalysisDefinitionProvider.实现接口:public class CustomAnalysisDefinitionProvider implements LuceneAnalysisDefinitionProvider {    @Override    public void register(LuceneAnalyzerDefinitionRegistryBuilder builder) {        builder.analyzer( "myAnalyzer" )                        .tokenizer( KeywordTokenizerFactory.class )                        .tokenFilter( ClassicFilterFactory.class )                        .tokenFilter( LowerCaseFilterFactory.class )                        .tokenFilter( StopFilterFactory.class )                                // You can pass parameters like this                                .param( "mapping", "org/hibernate/search/test/analyzer/stoplist.properties" )                                .param( "ignoreCase", "true" );        // You can define multiple analyzers        builder.analyzer( "otherAnalyzer" )                        .tokenizer( ... ) ...    }}然后告诉 Hibernate Search 使用它:# In properties.javahibernate.search.lucene.analysis_definition_provider = com.mycompany.CustomAnalysisDefinitionProvider;您可以在 的实现中自由地执行任何操作register,因此您可能可以检查系统属性,甚至加载配置文件。如果您的实现集有限,您还可以在启动 JVM 时通过hibernate.search.lucene.analysis_definition_provider系统属性设置直接覆盖定义提供程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java