ICU 排序关键字字段

编辑

排序用于根据特定语言的词序对文档进行排序。icu_collation_keyword 字段类型适用于所有索引,它会像标准关键字字段一样,将术语直接编码为 doc values 字段中的字节和单个索引标记。

默认使用DUCET 排序,这是一种尽力而为的语言中性排序尝试。

以下是设置用于按“电话簿”顺序对德语姓名进行排序的字段的示例

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "name": {   
        "type": "text",
        "fields": {
          "sort": {  
            "type": "icu_collation_keyword",
            "index": false,
            "language": "de",
            "country": "DE",
            "variant": "@collation=phonebook"
          }
        }
      }
    }
  }
}

GET /my-index-000001/_search 
{
  "query": {
    "match": {
      "name": "Fritz"
    }
  },
  "sort": "name.sort"
}

name 字段使用 standard 分析器,因此支持全文查询。

name.sort 字段是一个 icu_collation_keyword 字段,它将名称保留为单个标记 doc values,并应用德语“电话簿”顺序。

一个示例查询,该查询搜索 name 字段并在 name.sort 字段上排序。

ICU 排序关键字字段的参数

编辑

icu_collation_keyword 字段接受以下参数

doc_values

该字段是否应以列跨步方式存储在磁盘上,以便以后用于排序、聚合或脚本?接受 true(默认值)或 false

index

该字段是否可搜索?接受 true(默认值)或 false

null_value

接受一个字符串值,该值将替换任何显式的 null 值。默认为 null,这意味着该字段被视为缺失。

ignore_above

长度超过 ignore_above 设置的字符串将被忽略。检查是在排序之前对原始字符串执行的。ignore_above 设置可以使用PUT 映射 API在现有字段上更新。默认情况下,没有限制,所有值都将被索引。

store

字段值是否应与_source字段分开存储并可检索。接受 truefalse(默认值)。

fields

多字段允许以多种方式为不同的目的索引相同的字符串值,例如一个用于搜索的字段和一个用于排序和聚合的多字段。

排序选项

编辑
strength
strength 属性确定在比较期间认为重要的最小差异级别。可能的值为:primarysecondarytertiaryquaternaryidentical。有关每个值的更详细说明,请参阅ICU 排序文档。除非排序中另有指定,否则默认为 tertiary
decomposition
可能的值:no(默认值,但取决于排序)或 canonical。将此分解属性设置为 canonical 允许 Collator 正确处理未规范化的文本,产生与文本已规范化时相同的结果。如果设置了 no,则用户有责任确保所有文本在比较之前或获取 CollationKey 之前都已采用适当的形式。调整分解模式允许用户在更快和更完整的排序行为之间进行选择。由于世界上许多语言不需要文本规范化,因此大多数语言环境将 no 设置为默认分解模式。

以下选项仅供专家使用

alternate
可能的值:shiftednon-ignorable。将 quaternary 强度的备用处理设置为移位或不可忽略。这归结为忽略标点符号和空格。
case_level
可能的值:truefalse(默认值)。是否需要区分大小写的排序。当 strength 设置为 primary 时,这将忽略重音差异。
case_first
可能的值:lowerupper。用于控制当 strength 为 tertiary 时不忽略大小写时哪个大小写先排序。默认值取决于排序。
numeric
可能的值:truefalse(默认值)。数字是否根据其数字表示进行排序。例如,值 egg-9 排在值 egg-21 之前。
variable_top
单个字符或缩写。控制 alternate 的可变内容。
hiragana_quaternary_mode
可能的值:truefalsequaternary 强度下区分片假名和平假名字符。