ElasticSearch-定义自定义字母顺序进行排序

我正在使用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"))。

以上是 ElasticSearch-定义自定义字母顺序进行排序 的全部内容, 来源链接: utcz.com/qa/416416.html

回到顶部