我使用的是hibernate-search和hibernate-search-elasticsearch版本5.10.3.Final。我想在一些领域应用ICU变换。以下是elasticsearch文档中的过滤器:
https://www.elastic.co/guide/en/elasticsearch/plugins/5.6/analysis-icu-transform.html
但是我在hibernate-search依赖项使用的lucene版本中找不到аTokenFilterFactory。在TokenFilterDef中,工厂属性是必需的。有人知道如何使用hibernate-search实现音译吗?
发布于 2018-08-30 22:26:03
您可以使用注释并依赖于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,因此字符串值必须用引号括起来。不过,为了方便起见,允许使用单引号。
或者,您可以通过编程方式定义分析器,并从更自然的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://stackoverflow.com/questions/52098868
复制相似问题