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"))。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Elasticsearch 自定义排序/添加过滤子句分数

elasticsearch - ngram,自定义排序,不相关的结果

以自定义顺序对 Arraylist 进行排序

使用自定义排序顺序在Unix中对字母数字字符串进行排序

ElasticSearch使用分数按字母顺序对查询进行排序

ElasticSearch索引上的自定义属性

ElasticSearch中的Python自定义脚本

Kibana中的自定义Elasticsearch查询

创建自定义日期格式Elasticsearch

Elasticsearch自定义功能得分

Elasticsearch 自定义分析器

在Elasticsearch中定义自定义分析器进行查询时出错

PHP以自定义顺序对三个字母字符进行排序

基于自定义字母顺序python对数组进行排序

在自定义foreach循环中按字母顺序对结果进行排序

如何在Java数组中按字母顺序对自定义对象进行排序?

如何使用 lodash 的 _sortBy() 根据自定义要求按字母顺序对这个列表进行排序?

如何使用NLog Elasticsearch Target定义自定义字段

Java:按自定义顺序对Collection <Class>进行排序

按自定义顺序对列表进行排序

使用自定义顺序对 Django 查询集进行排序

按给定的自定义顺序对列表进行排序

按自定义顺序对 RealmResult 进行排序

按特定顺序对自定义对象进行排序

在Eloquent中按自定义顺序对集合进行排序

如何按自定义顺序对值进行排序

按自定义顺序对对象数组进行排序

按自定义顺序对php数组进行排序

Swift:使用自定义顺序按键对字典进行排序