在Hibernate搜索中选择运行时分析器

wwwo4jvm  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(110)

我在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可能有关联。

3qpi33ja

3qpi33ja1#

在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搜索使用它:

# In properties.java
hibernate.search.lucene.analysis_definition_provider = com.mycompany.CustomAnalysisDefinitionProvider;

您可以在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无法帮助您做到这一点)。

相关问题