Вы можете использовать аннотации и полагаться на org.hibernate.search.elasticsearch.analyzer.ElasticsearchTokenFilterFactory
для создания определения фильтра токенов JSON:
@AnalyzerDef(
name = "myAnalyzer",
tokenizer = ...,
filter = @TokenFilterDef(
name = "myLatinTransform",
factory = ElasticsearchTokenFilterFactory.class,
params = {
@Parameter(name = "type", value = "'icu_transform'"),
@Parameter(name = "id", value = "'Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC'")
}
)
)
Будьте осторожны: значения параметров интерпретируются как JSON, поэтому строковые значения должны быть заключены в кавычки. Однако для удобства допускаются одинарные кавычки.
См. https://docs.jboss.org/hibernate/search/5.10/reference/en-US/html_single/#_custom_analyzers_using_the_code_analyzerdef_code_annotation
Или вы можете определить анализатор программно и воспользоваться более естественным API:
# In hibernate.properties
hibernate.search.elasticsearch.analysis_definition_provider com.acme.CustomAnalyzerProvider
public class CustomAnalyzerProvider implements ElasticsearchAnalysisDefinitionProvider {
@Override
public void register(ElasticsearchAnalysisDefinitionRegistryBuilder builder) {
builder.analyzer( "myAnalyzer" )
.withTokenizer( "whitespace" )
.withTokenFilter( "myLatinTransform" );
builder.tokenFilter( "myLatinTransform" )
.type( "icu_transform" )
.param( "id", "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC" );
}
}
См. https://docs.jboss.org/hibernate/search/5.10/reference/en-US/html_single/#_custom_analyzers_using_a_definition_provider