2

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

這有時是可以接受的,但在我的特定用例中是不能接受的。

我將不勝感激對此的評論。

回答

1

我從來沒有使用它,但有一個插件可以滿足您的需求: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"))。