ElasticSearch - 为排序定义自定义字母顺序
我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。ElasticSearch - 为排序定义自定义字母顺序
我有一个字符串排序问题。 我的应用程序的语言具有变音符号,其中有一个特定的字母 排序。例如Ł
去直接L
后,Ó
去O
后,等 所以,你应该像这样的字符串进行排序:
Dla
Dła
Doa
Dóa
Dza
Eza
ElasticSearch通过各种典型的字母第一,并在移动所有怪 字母end:
Dla
Doa
Dza
Dła
Dóa
Eza
我可以为ElasticSearch添加自定义字母排序吗? 也许有一些插件呢? 我是否需要编写自己的插件?我如何开始?
我发现了一个plugin为ElasticSearch, 波兰语,但据我所知它是分析和分析是不是在我的情况的解决方案 ,因为它会忽略变音符号和与L
离开文字和Ł
混合:
Dla
Dłb
Dlc
这有时是可以接受的,但在我的特定用例中是不能接受的。
我将不胜感激对此的评论。
我从来没有使用它,但有一个插件可以满足您的需求:ICU collation plugin。
您将不得不使用icu_collation
标记过滤器,这将令牌变成整理键。因此,您需要在Hibernate Search中使用单独的@Field
(例如myField_sort
)。
可以在特定分析器分配给您的场@Field(name = "myField_sort", analyzer = @Analyzer(definition = "myCollationAnalyzer"))
,并定义你的实体之一,这种分析仪(型号,参数)有类似的东西:
@Entity
@Indexed
@AnalyzerDef(
name = "myCollationAnalyzer",
filters = {
@TokenFilterDef(
name = "polish_collation",
factory = ElasticsearchTokenFilterFactory.class,
params = {
@Parameter(name = "type", value = "'icu_collation'"),
@Parameter(name = "language", value = "'pl'")
}
)
}
)
public class MyEntity {
查看文档的详细信息:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_custom_analyzers
这肯定有点笨拙,但分析仪配置在下一个Hibernate搜索版本中会变得更清晰一点,其版本号为normalizers and analyzer definition providers。
注意:像往常一样,您的字段将需要声明为可排序(@SortableField(forField = "myField_sort")
)。