Apache lucene:排序数字和德语变音符号
Apache lucene: Sorting numbers and german umlauts
Apache lucene 中是否有一个选项可以正确地对数字和德语变音符号进行排序,这意味着,例如
“Ü”应该解释为"Ue",表示排序顺序为
U, Ü, Z
而不是:
U, Z, Ü
喜欢 lucene 默认值。
像
这样对数字进行排序
1, 2, 3, 100, 101, 102
与 lucene 默认值不同:
1, 100, 101, 102, 2, 3
我该如何解决条目?
谢谢!
是的,这是可能的。首先关于德语,在 Lucene 中处理语言的最佳方式是使用 ICU library。对于 Lucene,我们有相应的 lucene-analyzers-icu 依赖。
您可以使用 ICUCollationDocValuesField 对值进行排序。
final Collator instance = Collator.getInstance(ULocale.GERMAN);
final ICUCollationDocValuesField contents = new ICUCollationDocValuesField("contents", instance);
稍后使用此字段创建文档,您稍后可以在此字段上排序并获得预期结果(例如 U、Ü、Z)
可以找到完整的工作示例there
关于数字排序 - 你只需要将它们排序而不是作为字符串(看起来你正在做的),但实际上将它们作为数字排序 SortField.Type.INT
应该可以帮助你
Apache lucene 中是否有一个选项可以正确地对数字和德语变音符号进行排序,这意味着,例如 “Ü”应该解释为"Ue",表示排序顺序为
U, Ü, Z
而不是:
U, Z, Ü
喜欢 lucene 默认值。
像
这样对数字进行排序1, 2, 3, 100, 101, 102
与 lucene 默认值不同:
1, 100, 101, 102, 2, 3
我该如何解决条目?
谢谢!
是的,这是可能的。首先关于德语,在 Lucene 中处理语言的最佳方式是使用 ICU library。对于 Lucene,我们有相应的 lucene-analyzers-icu 依赖。
您可以使用 ICUCollationDocValuesField 对值进行排序。
final Collator instance = Collator.getInstance(ULocale.GERMAN);
final ICUCollationDocValuesField contents = new ICUCollationDocValuesField("contents", instance);
稍后使用此字段创建文档,您稍后可以在此字段上排序并获得预期结果(例如 U、Ü、Z)
可以找到完整的工作示例there
关于数字排序 - 你只需要将它们排序而不是作为字符串(看起来你正在做的),但实际上将它们作为数字排序 SortField.Type.INT
应该可以帮助你