我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。
我对字符串排序有问题。我的应用程序的语言带有变音符号,它们具有特定的字母顺序。例如Ł
,直接在after之后L
,Ó
在after之后O
,等等。因此,您应该对字符串进行如下排序:
Dla
Dła
Doa
Dóa
Dza
Eza
ElasticSearch首先按典型字母排序,然后将所有奇怪的字母移到最后:
Dla
Doa
Dza
Dła
Dóa
Eza
我可以为ElasticSearch添加自定义字母顺序吗?也许有一些插件吗?我需要编写自己的插件吗?我该如何开始?
我找到了用于ElasticSearch的波兰语插件,但据我了解,它是用于分析的,在我的情况下,分析不是解决方案,因为它将忽略变音符号,并带有L
和Ł
混在一起的单词:
Dla
Dłb
Dlc
有时这是可以接受的,但在我的特定用例中是不可接受的。
对此,我将不胜感激。
我从未使用过它,但是有一个可以满足您需求的插件:ICU整理插件。
您将必须使用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/zh-CN/html_single/#_custom_analyzers
现在肯定有点笨拙,但是在具有规范化器和分析器定义提供程序的下一个Hibernate Search版本中,分析器配置将变得更加整洁。
注意:与往常一样,您的字段需要声明为可排序(@SortableField(forField = "myField_sort")
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句